美文网首页
mysql安装以及主从配置,备份,安装常见问题

mysql安装以及主从配置,备份,安装常见问题

作者: 潇豪 | 来源:发表于2020-04-05 10:44 被阅读0次

    1.使用前准备

    版本使用的是:mysql-5.7.29-linux-glibc2.12-x86_64.tar.gz
    可以去国内镜像源下载速度比较快

    centos集成了mariadb,而安装mysql的话会和mariadb的文件冲突,所以一定需要先卸载掉mariadb

    • 列出所有被安装的rpm package

    rpm -qa | grep mariadb

    • 卸载

    rpm -e --nodeps mariadb-libs-5.5.56-2.el7.x86_64

    • 查看有无安装mysql

    rpm -qa | grep mysql

    • 卸载流程

    ps aux|grep mysql

    find / -name mysql

    rm -rf xxxxxxxxxxxx

    • 首先解压

    tar -zxvf mysql-5.7.29-linux-glibc2.12-x86_64.tar.gz -C /usr/local

    • 修改名称

    mv mysql-5.7.29-linux-glibc2.12-x86_64 mysql

    • 配置设置开机自启动

    cd mysql/support-files/
    cp mysql.server /etc/init.d/mysql

    • 修改/etc/init.d/mysql参数

    vim /etc/init.d/mysql
    basedir=/usr/local/mysql
    datadir=/usr/local/mysql/data

    图片.png
    • 建立一个mysql的组:

    groupadd mysql

    • 建立mysql用户,并且把用户放到mysql组:

    useradd -r -g mysql mysql

    • 给mysql用户设置一个密码:

    passwd mysql

    • 更改目录/usr/local/mysql 拥有者:

    chown -R mysql:mysql /usr/local/mysql/

    2.数据库初始化

    cd /usr/local/mysql/bin/
     ./mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
    
    
    • 如果出现这个错误 提示缺少一些库


      图片.png
    • 执行

    yum install -y libaio.so.1 或者 yum -y install numact 然后再执行安装操作

    记录一下初始密码
    • 数据库加密

    ./mysql_ssl_rsa_setup --datadir=/usr/local/mysql/data

    • 数据库启动

    ./mysqld_safe --user=mysql &

    • 检查状态

    ps -ef|grep mysql

    3. 数据库操作

    • 登录 首次登陆密码为上面初始化密码

    ./mysql -uroot -p

    • 修改密码
      set password=password('新密码');

    • 远程访问

    grant all privileges on *.* to root@'%' identified by 'root';
    flush privileges;
    

    4.访问操作

    • 开放本地防火墙端口

    firewall-cmd --zone=public --add-port=3306/tcp --permanent
    firewall-cmd --reload
    关闭防火墙也可以

    5.后续配置


    开机自启

    • 添加服务

    chkconfig --add mysql

    • 开启自启

    chkconfig mysql on


    配置环境变量(可选操作)

    vim /etc/profile

    添加:

    MYSQL_HOME=/usr/local/mysql
    export MYSQL_HOME
    
    
    图片.png
    • 配置生效

    source /etc/profile

    • 或者不配置环境变量,配置一个软连接(推荐!!!!!)

    ln -s /usr/local/mysql/bin/mysql /usr/bin

    下次可以直接使用mysql指令了

    完成安装

    5.主从配置

    1.配置my.cnf文件

    server_id主从id必须不一致

    vim /etc/my.cnf

    [clinet]
    port = 3306
    default-character-set=utf8
    [mysqld]
    port = 3306
    server-id=64
    explicit_defaults_for_timestamp=true
    character-set-server=utf8
    basedir= /usr/local/mysql
    datadir= /usr/local/mysql/data
    default-storage-engine=INNODB
    log-bin=mysql-bin
    

    2.在主库中配置

    创建一个用户给从数据库并且给予权限,其中ip,改为从库ip地址

    create user slave;
    grant replication slave on *.* to 'slave'@'127.0.0.1'identified by 'root123';
    flush privileges;  
    
    

    查询主库状态

    show master status;
    
    图片.png

    记录下面的file 和position

    3. 在从库中配置

    填入上面记录的值,master_host填主机ip

    change master to master_host='127.0.0.1',master_port=3306,master_user='slave',master_password='root123',master_log_file='master-bin.000002',master_log_pos=2505;
    

    然后执行

    start slave; 关闭是stop slave
    

    查看 slave 的状态

    show slave status \G
    
    图片.png 图片.png

    这两个都是yes表示启动成功了

    4.如果没有成功,请在主库中

    flush logs;
    show master status;

    记下File, Position。

    图片.png

    来到从库

    CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000003',MASTER_LOG_POS=154;
    stop slave;
    start slave;
    show slave status \G;
    
    图片.png

    可以看到已经成功完成主从配置

    配置双主,只需要把从库当主库,主库当从库,按照以上思路再配置一遍即可

    6.数据库备份

    1. 全量备份

    进入到自定义的脚本目录

    /usr/local/mysql/sh
    创建一个脚本

    vim mysql_weekly.sh

    编辑shell脚本

    
    
    # 全备份路径
    
    backDir=/usr/local/mysql/weekly
    
    
    # 日志文件
    
    logFile=/usr/local/mysql/weekly/weekly_all.log
    
     
    
    # 获取当前时间,用于命名
    
    nowDate=`date +%Y%m%d`
    
    beginTime=`date +"%Y%m%d %H:%M:%S"`
    
     
    
    # 进入备份文件夹
    
    cd $backDir
    
    dumpFile=$nowDate.sql
    
    dumpFileTgz=$nowDate.sql.tgz
    
     
    
    # mysqldump 导出所有数据库
    
    echo dumping...
    
    mysqldump -uroot -proot --quick --all-databases --flush-logs --delete-master-logs --single-transaction > $dumpFile
    
    echo compressing...
    
     
    
    # 压缩文件
    
    tar czvf $dumpFileTgz $dumpFile
    # 是否删除sql文件
    #rm $dumpFile
    
    endTime=`date +"%Y%m%d %H:%M:%S"`
    
    echo begin:$beginTime end:$endTime $dumpFileTgz success >> $logFile
    
    

    2. 增量备份

    首先查看增量备份有没有开启,参考下图


    图片.png

    创建脚本文件mysql_daily.sh

    
    # 增量备份存放路径
    
    backDir=/usr/local/mysql/daily
    
    # binlog存放路径
    
    binDir=/usr/local/mysql/data
    # (上面开启binlog的路径,忘记了就通过mysql show variables like '%log_bin%'; 进行查询)
    
    # binlog.index 文件路径
    
    binIndex=/usr/local/mysql/data/mysql-bin.index
    #(上面开启binlog的路径,忘记了就通过mysql show variables like '%log_bin%'; 进行查询)
    
    # 日志文件
    
    logFile=/usr/local/mysql/daily/bak-daily.log
    
    # 将当前所有的日志写到磁盘,会新建一个00000*的binlog文件
    
    mysqladmin -uroot -proot flush-logs
    
    # 获取当前有几条binlog文件(需要保证是从1开始的)
    
    count=`wc -l $binIndex | awk '{print $1}'`
    
    nextNum=0
    
    for file in `cat $binIndex`
    
    do
    
    # 获取文件名,去除文件夹名
    
    base=`basename $file`
    
    # 遍历每个binlog文件,如果是最新的不做操作,否则备份
    
    nextNum=`expr $nextNum + 1`
    
    if [ $nextNum -eq $count ]
    
    then
    
    echo $base skip! >> $logFile
    
    else
    
    dest=$backDir/$base
    
    # file already exist
    
    if(test -e $dest)
    
    then
    
    echo $base exist! >> $logFile
    
    
    
    

    7. 定时任务

    配置定时任务,去定时启动这2个脚本

    输入如下命令,进入定时任务编辑界面:

    crontab -e
    

    添加如下命令(注意:linux的定时规则与spring的不同)

    每天2点启动一次增量备份

    0 2 * * * sh   /usr/local/mysql/sh/mysql_daily.sh
    
    0 2 5 * * sh /usr/local/mysql/sh/mysql_weekly.sh
    

    8. 常见问题

    1.授权给其他用用户到数据库的权限报错的问题解决,尤其在配置其他访问数据库权限的时候

    查看是否有授权权限

    select host,user,grant_priv,Super_priv from mysql.user;

    发现 没权限,改成 Y

    update mysql.user set grant_priv='y' where host='localhost';
    update mysql.user set grant_priv='y' where host='%';

    刷新权限

    flush privileges;

    2.linux忘记mysql密码快速处理方法

    首先需要我们关闭mysql

    service stop mysql

    然后执行

    mysqld_safe --user=mysql --skip-grant-tables --skip-networking &

    现在可以直接登陆,不需要密码

    mysql -u root

    修改密码,我的版本是5.7

    update user set authentication_string=password("test") where user='root';

    刷新权限后成功

    flush privileges;

    相关文章

      网友评论

          本文标题:mysql安装以及主从配置,备份,安装常见问题

          本文链接:https://www.haomeiwen.com/subject/zdotphtx.html