经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 数据库/运维 » MySQL » 查看文章
mysql备份和MHA高可用
来源:cnblogs  作者:IT乐乐  时间:2021/1/11 9:29:42  对本文有异议

一、编写脚本,支持让用户自主选择,使用mysqldump还是xtraback全量备份。

  1. #!/bin/bash
  2. . /etc/rc.d/init.d/functions
  3. TIME=`date +%F_%H-%M-%S`
  4. DIR=/data/dbbackup
  5. PASS=123456
  6. PS3="请输入备份方法编号:"
  7. MENU="
  8. 使用mysqldump全量备份
  9. 使用xtraback全量备份
  10. 退出
  11. "
  12. [ -d $DIR ] || mkdir -p $DIR
  13. clear
  14. which mysql&>/dev/null&&echo *****mysql数据库备份*****||{ echo "本机未安装mysql,无需备份。";exit; }
  15. select M in $MENU ;do
  16. case $REPLY in
  17. 1)
  18. mysqldump -uroot -p"$PASS" -A -F -E -R --triggers --single-transaction --master-data=1 --flush-privileges --default-character-set=utf8 --hex-blob | gzip > ${DIR}/${TIME}.sql.gz
  19. [[ "0 0" == ${PIPESTATUS[*]} ]] && action "备份成功!" || action "备份失败,请检查!" /bin/false
  20. exit
  21. ;;
  22. 2)
  23. which xtrabackup &>/dev/null || { echo "本机未安装xtraback工具,无法运行此功能。";exit; }
  24. xtrabackup -uroot -p"$PASS" --backup --target-dir="${DIR}/${TIME}/" &>/dev/null && { tar Pzcf ${DIR}/${TIME}.tar.gz ${DIR}/${TIME}/ && { action "备份成功!" ; rm -rf ${DIR}/${TIME}/; } || action "备份成功,未能打包!!!"; } || action "备份失败,请检查!" /bin/false
  25. exit
  26. ;;
  27. 3)
  28. echo 您已退出!
  29. exit
  30. ;;
  31. *)
  32. echo 输入错误,请重新输入!
  33. ;;
  34. esac
  35. done

二、配置Mysql主从同步。

1、安装两台mysql服务器,安装好数据库软件,均使用centos7上的mariadb。

2、开启配置主服务器,开启二进制日志并设置唯一server-id。

  1. [root@master ~]#vim /etc/my.cnf.d/server.cnf
  2. #添加以下内容:
  3. [mysqld]
  4. server-id=8
  5. log-bin

3、重启服务。

  1. [root@master ~]#systemctl restart mariadb

4、创建账户。

  1. MariaDB [(none)]> grant replication slave on *.* to repluser@'10.0.0.%' identified by '123456';
  2. Query OK, 0 rows affected (0.00 sec)

5、查看二进制文件和位置。

  1. MariaDB [(none)]> SHOW MASTER LOGS;
  2. +--------------------+-----------+
  3. | Log_name | File_size |
  4. +--------------------+-----------+
  5. | mariadb-bin.000001 | 245 |
  6. +--------------------+-----------+

6、开始配置从节点,设置唯一server-id,设置只读。

  1. [mysqld]
  2. server_id=200 #为当前节点设置一个全局惟的ID号
  3. log-bin
  4. read_only=ON #设置数据库只读,针对supper user无效

7、重启服务。

  1. [root@slave ~]#systemctl restart mariadb

8、设置从节点。

  1. [root@slave ~]#mysql
  2. Welcome to the MariaDB monitor. Commands end with ; or \g.
  3. Your MariaDB connection id is 4
  4. Server version: 5.5.68-MariaDB MariaDB Server
  5. Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
  6. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
  7. MariaDB [(none)]> CHANGE MASTER TO MASTER_HOST='10.0.0.242', MASTER_USER='repluser', MASTER_PASSWORD='123456', MASTER_PORT=3306, MASTER_LOG_FILE='mariadb-bin.000001', MASTER_LOG_POS=245;
  8. Query OK, 0 rows affected (0.00 sec)
  9. MariaDB [(none)]> start slave;
  10. Query OK, 0 rows affected (0.00 sec)

9、到此mysql的主从同步设置完成。

三、使用MHA实现Mysql高可用。
1、实现MHA高可用需要部署4台服务器。
? 1台管理端,不支持Centos8。
? 1台数据库主节点服务器。
? 2台数据库从节点服务器。
数据库服务器均使用centos7上的mariadb。

2、管理节点安装MHA,需要两个包。特别注意,低版本的mariadb和myql不要使用0.58版的MHA。

  1. [root@mha ~]#yum -y install mha4mysql-node-0.56-0.el6.centos.noarch.rpm
  2. [root@mha ~]#yum -y install mha4mysql-manager-0.56-0.el6.centos.noarch.rpm

3、所有被管理节点需安装mha4mysql-node。

  1. [root@master ~]#yum -y install mha4mysql-node-0.56-0.el6.centos.noarch.rpm
  2. [root@slave1 ~]#yum -y install mha4mysql-node-0.56-0.el6.centos.noarch.rpm
  3. [root@slave2 ~]#yum -y install mha4mysql-node-0.56-0.el6.centos.noarch.rpm

4、 在所有节点实现相互之间ssh key验证。

  1. [root@master ~]#ssh-keygen
  2. [root@master ~]#ssh-copy-id 10.0.0.242
  3. [root@master ~]#ssh 10.0.0.243
  4. [root@master ~]#ssh 10.0.0.77
  5. [root@master ~]#ssh 10.0.0.17

5、管理节点配置MHA。

  1. [root@mha ~]#mkdir /etc/mastermha/
  2. [root@mha ~]#vim /etc/mastermha/app1.cnf
  3. #添加以下内容:
  4. [server default]
  5. user=mhauser
  6. password=123456
  7. manager_workdir=/data/mastermha/app1/
  8. manager_log=/data/mastermha/app1/manager.log
  9. remote_workdir=/data/mastermha/app1/
  10. ssh_user=root
  11. repl_user=repluser
  12. repl_password=123456
  13. ping_interval=1
  14. [server1]
  15. hostname=10.0.0.242
  16. candidate_master=1    
  17. [server2]
  18. hostname=10.0.0.243
  19. candidate_master=1
  20. [server3]
  21. hostname=10.0.0.77

6、配置数据库主节点,完成后重启数据库服务。

  1. [root@master ~]#vim /etc/my.cnf.d/server.cnf
  2. [mysqld]
  3. server_id=100
  4. log-bin
  5. skip_name_resolve=1

7、配置数据库从节点,不同节点的server-id不能相同,完成后重启数据库服务。

  1. [root@slave1 ~]#vim /etc/my.cnf.d/server.cnf
  2. [mysqld]
  3. server_id=200
  4. log-bin
  5. read_only
  6. relay_log_purge=0
  7. skip_name_resolve=1
  8. [root@slave1 ~]#systemctl restart mariadb.service

8、数据库主节点创建账户,要和MHA配置文件里设置的一致。

  1. MariaDB [(none)]> grant replication slave on *.* to repluser@'10.0.0.%' identified by '123456';
  2. Query OK, 0 rows affected (0.00 sec)
  3. MariaDB [(none)]> grant all on *.* to mhauser@'10.0.0.%' identified by '123456';
  4. Query OK, 0 rows affected (0.00 sec)

9、数据库主节点完整备份数据库。

  1. [root@master ~]#mysqldump -A -F --single-transaction --master-data=1 > db.sql
  2. #编辑备份文件,找到CHANGE MASTER TO开始的地方,改为以下内容:
  3. [root@master ~]#vim db.sql
  4. CHANGE MASTER TO
  5. MASTER_HOST='10.0.0.242',
  6. MASTER_USER='repluser',
  7. MASTER_PASSWORD='123456',
  8. MASTER_PORT=3306,
  9. MASTER_LOG_FILE='mariadb-bin.000008', MASTER_LOG_POS=245;

10、复制数据库备份文件到从节点并导入,两个从节点都要执行。

  1. [root@master ~]#scp db.sql 10.0.0.77:/root
  2. [root@master ~]#scp db.sql 10.0.0.243:/root
  3. [root@slave1 ~]#mysql < db.sql
  4. [root@slave2 ~]#mysql < db.sql

11、数据库从节点启动同步功能,两个从节点都要执行。

  1. MariaDB [(none)]> start slave;
  2. Query OK, 0 rows affected (0.00 sec)
  3. MariaDB [(none)]> show slave status\G
  4. *************************** 1. row ***************************
  5. Slave_IO_State: Waiting for master to send event
  6. Master_Host: 10.0.0.242
  7. Master_User: repluser
  8. Master_Port: 3306
  9. Connect_Retry: 60
  10. Master_Log_File: mariadb-bin.000010
  11. Read_Master_Log_Pos: 340
  12. Relay_Log_File: mariadb-relay-bin.000010
  13. Relay_Log_Pos: 626
  14. Relay_Master_Log_File: mariadb-bin.000010
  15. Slave_IO_Running: Yes
  16. Slave_SQL_Running: Yes
  17. ......

12、检查整个MHA环境是否正常。

  1. [root@mha ~]#masterha_check_ssh --conf=/etc/mastermha/app1.cnf
  2. [root@mha ~]#masterha_check_status --conf=/etc/mastermha/app1.cnf
  3. #如果报以下错误,就是MHA的版本高了,使用0.56版即可,MySQL5.6(Mariadb10.1)以上版本才可使用MHA0.58版。
  4. Checking if super_read_only is defined and turned on..DBD::mysql::st execute failed: Unknown system variable 'super_read_only' at /usr/share/perl5/vendor_perl/MHA/SlaveUtil.pm line 245.
  5. Mon Jan 4 17:56:55 2021 - [error][/usr/share/perl5/vendor_perl/MHA/MasterMonitor.pm, ln208] Slaves settings check failed!
  6. Mon Jan 4 17:56:55 2021 - [error][/usr/share/perl5/vendor_perl/MHA/MasterMonitor.pm, ln416] Slave configuration failed.
  7. Mon Jan 4 17:56:55 2021 - [error][/usr/share/perl5/vendor_perl/MHA/MasterMonitor.pm, ln427] Error happened on checking configurations. at /usr/bin/masterha_check_repl line 48.
  8. Mon Jan 4 17:56:55 2021 - [error][/usr/share/perl5/vendor_perl/MHA/MasterMonitor.pm, ln525] Error happened on monitoring servers.
  9. Mon Jan 4 17:56:55 2021 - [info] Got exit code 1 (Not master dead).

12、管理节点启动MHA即可监控数据库,使用后台执行。

  1. [root@mha ~]#nohup masterha_manager --conf=/etc/mastermha/app1.cnf &> /dev/null

13、检查MHA状态。

  1. [root@mha ~]#masterha_check_status --conf=/etc/mastermha/app1.cnf  
  2. app1 (pid:33866) is running(0:PING_OK), master:10.0.0.242

14、故障测试,停掉主节点数据库服务。

  1. [root@master ~]#systemctl stop mariadb.service
  2. #管理节点的masterha_manager已退出。
  3. #查看自动升级的主节点:
  4. MariaDB [(none)]> show slave status\G
  5. Empty set (0.00 sec)
  6. #查看另一台从节点,数据库主节点已自动变为10.0.0.243:
  7. MariaDB [(none)]> show slave status\G
  8. *************************** 1. row ***************************
  9. Slave_IO_State: Waiting for master to send event
  10. Master_Host: 10.0.0.243
  11. Master_User: repluser
  12. Master_Port: 3306
  13. Connect_Retry: 60
  14. Master_Log_File: mariadb-bin.000010
  15. Read_Master_Log_Pos: 245
  16. Relay_Log_File: mariadb-relay-bin.000002
  17. Relay_Log_Pos: 531
  18. Relay_Master_Log_File: mariadb-bin.000010
  19. Slave_IO_Running: Yes
  20. Slave_SQL_Running: Yes
  21. ......

15、删掉已升级主节点mysql配置文件的read_only,否则新主节点数据库服务重启后会无法写入数据。

16、将原主节点修复后,重新配置为从节点,修改MHA管理端配置即可重新使用MHA监控数据库服务器。

原文链接:http://www.cnblogs.com/lele3721/p/14228906.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号