LNMP+HAProxy+Keepalived负载均衡(四)- MySQL双机互备及自动备份

栏目: 数据库 · 发布时间: 5年前

内容简介:前三篇已实现了最基本的负载均衡,但是还存在问题,如两个数据库不同步,上传的附件不同步,数据库没有制定备份计划,负载均衡参数还有待优化等问题。这里先把双机互备和自动备份的内容补齐。

前三篇已实现了最基本的负载均衡,但是还存在问题,如两个数据库不同步,上传的附件不同步,数据库没有制定备份计划,负载均衡参数还有待优化等问题。这里先把双机互备和自动备份的内容补齐。

    • 配置 MySQL 数据库的账户密码(以下命令仅用参考,这里的目的是要有一个可供内网其他服务器访问本机数据库的账户);
    # 停止数据库服务
    service mysql stop
    # 免验证启动数据库服务
    mysqld --user=mysql --skip-grant-tables --skip-networking
    # 登录mysql
    mysql -u root mysql
    # 修改用户密码的几种方式
    mysql> UPDATE user SET authentication_string=PASSWORD('dbpwd') where USER='dbadmin';
    mysql> UPDATE user SET authentication_string=PASSWORD('dbpwd') where USER='dbbaker';
    mysql> UPDATE user SET Password=PASSWORD('dbpwd') where USER='dbadmin';
    mysql> alter user user() identified by "dbpwd";
    # 使配置生效
    mysql> FLUSH PRIVILEGES;
    mysql> quit;
    
    # 重启mysql服务,注意,这里的mysql如果找不到服务,可以尝试mysqld,再不行就通过ps -ef | grep mysql找到进程ID(pid),然后通过kill -9 pid停止服务;
    service mysql restart
    mysql -udbadmin -p
    # Enter password: <输入新密码newpassword>
    # 创建用户并配置权限:
    mysql> GRANT ALL ON *.* TO 'dbadmin'@'%' IDENTIFIED BY 'dbpwd' WITH GRANT OPTION;
    # 移除权限
    # REVOKE ALL ON *.* TO 'dbadmin'@'%';
    FLUSH PRIVILEGES;
    # 全局层级:*.*
    # 数据库层级:db_name.*
    # 表层级:db_name.tbl_name
    # ALL是指分配所有权限,具体权限可以通过下面的查询语句查看
    
    # 查询用户权限
    select * from mysql.user \G;
    # 删除用户
    # delete from mysql.user where Host <> '%';
    # 至此,数据库可以通过以上账户进行远程连接了。
    # 在主数据库服务器上执行配置:
    vim /etc/my.cnf
    
    # 修改配置内容:
    server-id=6                           # 数据库集群中唯一
    lower_case_table_names=1              # 新增行,数据表不区分大小写
    replicate_wild_do_table=sync_db_name.%   # 只同步“sync_db_name”库下的表
    log-slave-updates=YES                # 从服务器同步后记录日志
    
    # 保存配置后重启MySQL服务:
    service mysql restart
    # 进入MySQL命令行,查看主数据库状态信息,其中的“File”和“Position”值后面会用到:
    mysql> use sync_db_name;
    mysql> show master status;

    LNMP+HAProxy+Keepalived负载均衡(四)- MySQL双机互备及自动备份

    • 配置MySQL的双机互备 - 备数据库服务器(192.168.6.210);
    # 停止slave:
    mysql> stop slave;
    
    # 进入MySQL命令行,配置要同步的主库来源:
    mysql> CHANGE MASTER TO MASTER_HOST='192.168.6.200',MASTER_PORT=10002,MASTER_USER='dbadmin',MASTER_PASSWORD='dbpwd',MASTER_LOG_FILE='mysql-bin.000016',MASTER_LOG_POS=1285;
    # MASTER_HOST:主数据库的IP;
    # MASTER_PORT:主数据库的端口(int),默认3306;
    # MASTER_USER,MASTER_PASSWORD:主数据库账户、密码;
    # MASTER_LOG_FILE:主数据库中查询到的“File”值;
    # MASTER_LOG_POS:主数据库中查询到的“Position”值;
    
    # 启动slave:
    mysql> start slave;
    
    # 检查slave:
    mysql> show slave status \G;
    
    # 命令行汇总:
    show master status;
    stop slave;

    Slave_IO_Running、Slave_SQL_Running 均显示为 Yes 说明主备同步服务正常运行,如下图:

    LNMP+HAProxy+Keepalived负载均衡(四)- MySQL双机互备及自动备份

    • 同步数据库的初始状态;

      在启动同步服务前,还需要手动同步下数据库的初始状态,之后可以通过修改其中主数据库中的表来查看从数据库是否同步变更;

    # 锁定要同步的数据库(192.168.6.200):
    msyql> use sync_db_name;
    msyql> flush tables with read lock;
    # 将要同步的数据库导出脚本:
    mysqldump -udbadmin -pdbpwd sync_db_name >/home/backup/sync_db_name.sql
    # 解锁前面锁定的数据库:
    msyql> unlock tables;
    
    # 将上方备份的 sql 拷贝到从数据库服务器(192.168.6.210),然后创建同名数据库,恢复数据:
    msyql> create database sync_db_name;
    msyql> use sync_db_name;
    msyql> source /home/backup/sync_db_name.sql;
    • 做双机互备或多机循环互备;
      然后将主从数据库服务器反转(即将192.168.6.200和192.168.6.210的主备身份调换),然后再配置一次同步即可。即192.168.6.200变更会同步到192.168.6.210,反之亦然。简单讲就是:
      双机互备:A主B从 + A从B主;
      多机循环互备:A主B从 + B主C从 + C主N从 + N主A从(建议不要过多,尤其是数据库数据量大,且变更频繁的情况下,同步毕竟也是有延迟的);
    • 数据库的自动备份(前三步前面的文章都有提到);

      • 安装计划工具;
      yum -y install crontabs
      • 编辑MySQL的配置文件;
      vim /etc/my.cnf
      
      # 添加配置文件内容:
      [mysqldump]
      # 用于备份数据库
      user=dbbaker
      password=dbpwd
      • 重启数据库服务;
      service mysql restart & service mysql status
      • 准备备份脚本;
      mkdir -p /home/bakup/lgd_system
      
      # 编辑bakdb.sh的内容:
      echo 'mysqldump sync_db_name | gzip > /home/backup/lgd_system/sync_db_name_$(date +%Y%m%d_%H%M%S).sql.gz' > /home/bakup/bakdb.sh
      chmod +x /home/bakcup/bakdb.sh
      
      # 解压缩指定的备份文件:
      gunzip sync_db_name_*.gz
      • 添加备份计划;
    # 方式一:
    crontab -e
    # 方式二:
    vim /etc/crontab
      
    # 编辑计划:
    # Example of job definition:
    # .---------------- minute (0 - 59) *表示每分钟
    # |  .------------- hour (0 - 23) *表示每小时
    # |  |  .---------- day of month (1 - 31) *表示每天
    # |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ... *表示每月
    # |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat *表示每天
    # |  |  |  |  |
    1. 10 * /home/backup/bakdb.sh # 表示每天10:30执行一次备份脚本


    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

    查看所有标签

    猜你喜欢:

    本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

    解密硅谷

    解密硅谷

    [美]米歇尔 E. 梅西纳(Michelle E. Messina)、乔纳森 C. 贝尔(Jonathan C. Baer) / 李俊、李雪 / 机械工业出版社 / 2018-12 / 50.00

    《解密硅谷》由身处硅谷最中心的连续创业者米歇尔·梅西纳和资深的投资人乔纳森·贝尔联合撰写,二人如庖丁解牛一般为读者深入剖析硅谷成功的原因:从硅谷的创新机制、创业生态、投资领域的潜规则、秘而不宣的价值观等角度,让阅读本书的人能够在最短的时间内,拥有像硅谷人一样的商业头脑,从而快速发现机遇,顺利地躲过创业的坑,熬过创业生死挑战中的劫数,带领初创公司顺利地活下去,并实现快速增长。 如果初创公司能够......一起来看看 《解密硅谷》 这本书的介绍吧!

    HTML 编码/解码
    HTML 编码/解码

    HTML 编码/解码

    UNIX 时间戳转换
    UNIX 时间戳转换

    UNIX 时间戳转换

    正则表达式在线测试
    正则表达式在线测试

    正则表达式在线测试