当前位置:首页 > 文章列表 > 数据库 > MySQL > LNMP+HAProxy+Keepalived负载均衡(四)- MySQL双机互备及自动备份

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

来源:SegmentFault 2023-01-23 21:21:18 0浏览 收藏

编程并不是一个机械性的工作,而是需要有思考,有创新的工作,语法是固定的,但解决问题的思路则是依靠人的思维,这就需要我们坚持学习和更新自己的知识。今天golang学习网就整理分享《LNMP+HAProxy+Keepalived负载均衡(四)- MySQL双机互备及自动备份》,文章讲解的知识点主要包括MySQL、负载均衡、LNMP、keepalived、haproxy,如果你对数据库方面的知识点感兴趣,就不要错过golang学习网,在这可以对大家的知识积累有所帮助,助力开发能力的提升。

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

  • 配置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: 
    # 创建用户并配置权限:
    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  '%';
    # 至此,数据库可以通过以上账户进行远程连接了。
  • 配置MySQL的双机互备 - 主数据库服务器(192.168.6.200

    /etc/my.cnf
    的配置请参考LNMP+HAProxy+Keepalived负载均衡(三)- 配置文件汇总);

    # 在主数据库服务器上执行配置:
    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;

    show master status;
  • 配置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 说明主备同步服务正常运行,如下图:

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

    # 锁定要同步的数据库(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 *表示每天
      # |  |  |  |  |
      # *  *  *  *  * user-name(用户名)  command to be executed(脚本路径)
      # 30 10 * * * /home/backup/bakdb.sh # 表示每天10:30执行一次备份脚本(前方的注释去掉即可)
    • 计划任务常用操作命令;

      service crond start     # 启动服务
      service crond stop      # 关闭服务
      service crond restart   # 重启服务
      service crond reload    # 重新载入配置
      service crond status    # 查看服务状态
      tail -f /var/log/cron   # 查看执行日志
    • 备份文件解压缩

      gzip命令:
      选项参数:
      -c:将压缩后的数据显示到屏幕上,可以用于重定向;
      -d:解压缩的参数;
      -t:检验压缩的一致性,看是否有错误;
      -v:显示 源文件大小/压缩文件大小 的压缩比;
      -#:# 为数字的意思,代表压缩等級,-1 最快,但是压缩比最差、-9 最慢,但是压缩比最好!默认是 -6
      gzip -v  => 压缩文件,-v查看压缩比
      gzip -d 
      gunzip file.gz

今天关于《LNMP+HAProxy+Keepalived负载均衡(四)- MySQL双机互备及自动备份》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于mysql的内容请关注golang学习网公众号!

版本声明
本文转载于:SegmentFault 如有侵犯,请联系study_golang@163.com删除
浅析MySQL事务中的redo与undo浅析MySQL事务中的redo与undo
上一篇
浅析MySQL事务中的redo与undo
MySQL在CentOS 7中的安装
下一篇
MySQL在CentOS 7中的安装
查看更多
最新文章
查看更多
课程推荐
  • 前端进阶之JavaScript设计模式
    前端进阶之JavaScript设计模式
    设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
    542次学习
  • GO语言核心编程课程
    GO语言核心编程课程
    本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
    508次学习
  • 简单聊聊mysql8与网络通信
    简单聊聊mysql8与网络通信
    如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
    497次学习
  • JavaScript正则表达式基础与实战
    JavaScript正则表达式基础与实战
    在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
    487次学习
  • 从零制作响应式网站—Grid布局
    从零制作响应式网站—Grid布局
    本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
    484次学习
查看更多
AI推荐
  • 笔灵AI生成答辩PPT:高效制作学术与职场PPT的利器
    笔灵AI生成答辩PPT
    探索笔灵AI生成答辩PPT的强大功能,快速制作高质量答辩PPT。精准内容提取、多样模板匹配、数据可视化、配套自述稿生成,让您的学术和职场展示更加专业与高效。
    10次使用
  • 知网AIGC检测服务系统:精准识别学术文本中的AI生成内容
    知网AIGC检测服务系统
    知网AIGC检测服务系统,专注于检测学术文本中的疑似AI生成内容。依托知网海量高质量文献资源,结合先进的“知识增强AIGC检测技术”,系统能够从语言模式和语义逻辑两方面精准识别AI生成内容,适用于学术研究、教育和企业领域,确保文本的真实性和原创性。
    22次使用
  • AIGC检测服务:AIbiye助力确保论文原创性
    AIGC检测-Aibiye
    AIbiye官网推出的AIGC检测服务,专注于检测ChatGPT、Gemini、Claude等AIGC工具生成的文本,帮助用户确保论文的原创性和学术规范。支持txt和doc(x)格式,检测范围为论文正文,提供高准确性和便捷的用户体验。
    30次使用
  • 易笔AI论文平台:快速生成高质量学术论文的利器
    易笔AI论文
    易笔AI论文平台提供自动写作、格式校对、查重检测等功能,支持多种学术领域的论文生成。价格优惠,界面友好,操作简便,适用于学术研究者、学生及论文辅导机构。
    38次使用
  • 笔启AI论文写作平台:多类型论文生成与多语言支持
    笔启AI论文写作平台
    笔启AI论文写作平台提供多类型论文生成服务,支持多语言写作,满足学术研究者、学生和职场人士的需求。平台采用AI 4.0版本,确保论文质量和原创性,并提供查重保障和隐私保护。
    35次使用
微信登录更方便
  • 密码登录
  • 注册账号
登录即同意 用户协议隐私政策
返回登录
  • 重置密码