qidao123.com技术社区-IT企服评测·应用市场

标题: mysql 数据库双机热备份 [打印本页]

作者: 去皮卡多    时间: 2025-4-24 13:38
标题: mysql 数据库双机热备份
mysql 数据库双机热备份

1. 环境准备

名词表明

2. 主从复制

环境形貌
  1. 主服务器master:192.168.111.136
  2. 从服务器slave:192.168.111.137
  3. MySQL 用户:replicate
  4. MySQL 用户密码:root
复制代码
两台机器同时操纵,可以使用 MobaXterm_CHS 毗连虚拟机,便于操纵


关闭防火墙
  1. service iptables stop
复制代码
安装mysql
  1. # 解压mysql安装包,主从服务器mysql版本保持一致
  2. cd /home
  3. tar -xvf MySQL.rpm-bundle.tar
  4. # 安装数据库
  5. rpm -ivh MySQL-*rpm --nodeps --force
复制代码
启动mysql,登录mysql
  1. service mysql start
  2. # 首次登录不需要密码,直接enter
  3. mysql -uroot -p
复制代码
  1. # 授权root并修改密码为root
  2. grant  all privileges on  *.* to 'root'@'localhost' identified by 'root';
  3. # 仅修改密码:alter user 'root'@'localhost' indentified by 'root';
  4. flush privileges;
复制代码
改成对应的静态ip
  1. cd /etc/sysconfig/network-scripts/
  2. cat ifcfg-eth0
  3. # 如下内容
  4. DEVICE=eth0
  5. HWADDR=00:0C:29:6D:7A:FD
  6. TYPE=Ethernet
  7. UUID=859d5289-7bf4-423f-aad4-dd2f4a0becbb
  8. ONBOOT=no
  9. NM_CONTROLLED=yes
  10. BOOTPROTO=dhcp
  11. vi ifcfg-eth0
  12. # 改成
  13. DEVICE=eth0
  14. HWADDR=00:0C:29:6D:7A:FD
  15. TYPE=Ethernet
  16. UUID=859d5289-7bf4-423f-aad4-dd2f4a0becbb
  17. ONBOOT=yes
  18. NM_CONTROLLED=yes
  19. BOOTPROTO=static
  20. IPADDR=192.168.111.137
  21. NETMASK=255.255.255.0
  22. GATEWAY=192.168.111.1
  23. DNS1=8.8.8.8
  24. DNS2=8.8.4.4
  25. # 重启网络
  26. sudo systemctl restart network
复制代码
主服务器master配置

进入192.168.111.136,进入mysql,创建同步用户replicate,授权复制(replication)附属(slave)权限,并指定从服务器ip以及暗码为root
  1. # 主服务器创建用户
  2. grant replication slave on *.* to  'replicate'@'192.168.111.137' identified by  'root';
  3. flush privileges;
复制代码
  1. # 在从服务器192.168.111.137 上测试
  2. mysql -h192.168.111.136 -ureplicate -proot;
复制代码
修改主服务器 mysql 配置文件
  1. vi /etc/my.cnf
  2. # 添加如下内容
  3. [mysqld]
  4. server-id=1
  5. log-bin=mysql-bin
  6. binlog-do-db=test
  7. binlog-ignore-db=mysql
复制代码
重启mysql服务
  1. service mysql restart
复制代码
检察主服务器状态
  1. # 进入mysql服务
  2. mysql -uroot -proot
  3. # 刷新表的读取锁
  4. flush tables with read lock;
  5. # 查看主服务器的状态
  6. show master status\G;
  7. # 解锁表
  8. unlock tables;
复制代码
注意记载:File(日志编号)和 Position(位置)两个参数,用于从服务器配置主从关系时用到。
从服务器slave配置

进入192.168.111.137,修改从服务器 mysql 配置文件
  1. vi /etc/my.cnf
  2. # 添加如下内容
  3. [mysqld]
  4. server-id=2
  5. log-bin=mysql-bin
  6. replicate-do-db=test
  7. replicate-ignore-db = mysql,information_schema,performance_schema
复制代码
重启mysql服务
  1. service mysql restart
复制代码
进入mysql,用change master指定同步位置
  1. # 先停止slave服务线程
  2. stop slave;
  3. # 指定同步位置
  4. change master to master_host='192.168.111.136',
  5. master_user='replicate',
  6. master_password='root',
  7. master_log_file='mysql-bin.000001',
  8. master_log_pos=107;
  9. # master_host 主服务ip
  10. # master_user 同步用户
  11. # master_log_file File日志编号
  12. # master_log_pos Position位置
  13. # 刷新权限
  14. flush privileges;
复制代码
检察从服务器状态
  1. show slave status\G;
  2. # Slave_IO_Running: Yes
  3. # Slave_SQL_Running: Yes
  4. # 表示设置成功
复制代码
sql语言不区分大小写。
测试同步

在主服务器中,进入mysql,创建表,插入数据
  1. use test;
  2. create table tb_mobile(mobile varchar(20), time timestamp default now())
  3. insert into tb_mobile (mobile) values('13456789898');
复制代码
在从服务器中,进入mysql,检察是否同步成功
  1. use test;
  2. select * from tb_mobile;
复制代码
现在从服务器可以同步主服务器,但是主服务器无法同步从服务器的操纵,接下来,举行主主复制配置。
即主从为单向复制,主主为双向复制。
3. 主主复制

环境形貌:和主从复制时划一,可以完成主从复制后,举行主主复制,二者不影响,不外以防万一,可以先打个快照。
  1. 服务器 A:192.168.111.136
  2. 服务器 B:192.168.111.137
  3. MySQL 用户:replicate
  4. MySQL 用户密码:root
复制代码
服务器 A 配置(192.168.111.136)

编辑 MySQL 配置文件
  1. vi /etc/my.cnf
  2. # 如下配置
  3. [mysqld]
  4. server-id=1
  5. log-bin=mysql-bin
  6. binlog-do-db=test
  7. binlog-ignore-db=mysql,information_schema,performance_schema
  8. # 添加以下配置以启用复制过滤器
  9. replicate-do-db=test
  10. replicate-ignore-db=mysql,information_schema,performance_schema
复制代码
创建复制用户:
  1. create user 'replicate'@'%' identified by 'root';
  2. grant replication slave on *.* to 'replicate'@'%';
  3. flush privileges;
  4. # %代表任何主机
复制代码
记载二进制日志文件名和位置:
  1. show master status;
复制代码
服务器 B 配置(192.168.111.137)

编辑 MySQL 配置文件:
  1. vi /etc/my.cnf
  2. # 如下配置
  3. [mysqld]
  4. server-id=2
  5. log-bin=mysql-bin
  6. binlog-do-db=test
  7. binlog-ignore-db=mysql,information_schema,performance_schema
  8. # 添加以下配置以启用复制过滤器
  9. replicate-do-db=test
  10. replicate-ignore-db=mysql,information_schema,performance_schema
复制代码
创建复制用户:
  1. create user 'replicate'@'%' identified by 'root';
  2. grant replication slave on *.* to 'replicate'@'%';
  3. flush privileges;
复制代码
记载二进制日志文件名和位置:
  1. show master status;
复制代码
配置双向复制

在服务器 A(192.168.111.136)上设置从服务器(指向服务器 B)
从服务器 B 获取二进制日志文件名和位置,然后在服务器 A 上执行以下命令:
  1. change master to
  2. master_host='192.168.111.137',
  3. master_user='replicate',
  4. master_password='root',
  5. master_log_file='mysql-bin.000001',  -- 使用服务器 b 上实际的日志文件名
  6. master_log_pos=107;  -- 使用服务器 b 上实际的日志位置
  7. start slave;
复制代码
在服务器 B(192.168.111.137)上设置从服务器(指向服务器 A)
从服务器 A 获取二进制日志文件名和位置,然后在服务器 B 上执行以下命令:
  1. change master to
  2. master_host='192.168.111.136',
  3. master_user='replicate',
  4. master_password='root',
  5. master_log_file='mysql-bin.000001',  -- 使用服务器 a 上实际的日志文件名
  6. master_log_pos=107;  -- 使用服务器 a 上实际的日志位置
  7. start slave;
复制代码
验证复制状态

在服务器 A 和 B 上验证复制状态
  1. show slave status\G;
复制代码
检查 Slave_IO_Running 和 Slave_SQL_Running 是否均为 Yes,以及是否存在任何错误。
分别在服务器A和服务器B中,插入输入,检察数据库是否同步
  1. use test;
  2. insert into tb_mobile (mobile) values('13456789898');
  3. select * from tb_mobile;
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 qidao123.com技术社区-IT企服评测·应用市场 (https://dis.qidao123.com/) Powered by Discuz! X3.4