MySQL双机热备份方案涵盖主从复制与主主复制,通过配置两台服务器关闭防火墙、设置静态IP、创建同步用户、修改my.cnf文件指定server-id及二进制日志,执行changemaster同步位置并验证Slave_IO_Running与Slave_SQL_Running均为Yes实现数据实时同步。
主服务器 master:192.168.111.136 从服务器 sla ve:192.168.111.137 MySQL 用户:replicate MySQL 用户密码:root两台机器同时操作 推荐使用 MobaXterm_CHS 连接虚拟机,操作会比较顺手。

service iptables stop安装 MySQL
# 解压 MySQL 安装包,主从服务器的 MySQL 版本务必保持一致 cd /home tar -xvf MySQL.rpm-bundle.tar # 安装数据库 rpm -ivh MySQL-*rpm --nodeps --force启动 MySQL,登录 MySQL
service mysql start # 首次登录不需要密码,直接回车即可 mysql -uroot -p
# 授权 root 并修改密码 grant all privileges on *.* to 'root'@'localhost' identified by 'root'; # 仅修改密码: alter user 'root'@'localhost' indentified by 'root'; flush privileges;改静态 IP
cd /etc/sysconfig/network-scripts/ cat ifcfg-eth0 # 原始内容如下 DEVICE=eth0 HWADDR=00:0C:29:6D:7A:FD TYPE=Ethernet UUID=859d5289-7bf4-423f-aad4-dd2f4a0becbb ONBOOT=no NM_CONTROLLED=yes BOOTPROTO=dhcp vi ifcfg-eth0 # 改成以下内容 DEVICE=eth0 HWADDR=00:0C:29:6D:7A:FD TYPE=Ethernet UUID=859d5289-7bf4-423f-aad4-dd2f4a0becbb ONBOOT=yes NM_CONTROLLED=yes BOOTPROTO=static IPADDR=192.168.111.137 NETMASK=255.255.255.0 GATEWAY=192.168.111.1 DNS1=8.8.8.8 DNS2=8.8.4.4 # 重启网络 sudo systemctl restart network主服务器 master 配置 进入 192.168.111.136,登录 MySQL,创建同步用户
replicate,并授权复制(replication)从属(sla ve)权限,同时指定从服务器 IP 以及密码为 root:
# 主服务器创建用户 grant replication sla ve on *.* to 'replicate'@'192.168.111.137' identified by 'root'; flush privileges;
# 在从服务器 192.168.111.137 上测试连接 mysql -h192.168.111.136 -ureplicate -proot;修改主服务器 MySQL 配置文件
vi /etc/my.cnf # 添加如下内容 [mysqld] server-id=1 log-bin=mysql-bin binlog-do-db=test binlog-ignore-db=mysql重启 MySQL 服务
service mysql restart查看主服务器状态
# 进入 MySQL 服务 mysql -uroot -proot # 刷新表的读取锁 flush tables with read lock; # 查看主服务器的状态 show master status\G; # 解锁表 unlock tables;注意记录
File(日志编号)和 Position(位置)这两个参数——后面配置从服务器时会用到。
从服务器 sla ve 配置
进入 192.168.111.137,修改从服务器 MySQL 配置文件:
vi /etc/my.cnf # 添加如下内容 [mysqld] server-id=2 log-bin=mysql-bin replicate-do-db=test replicate-ignore-db = mysql,information_schema,performance_schema重启 MySQL 服务
service mysql restart登录 MySQL,用
change master 指定同步位置:
# 先停止 sla ve 服务线程 stop sla ve; # 指定同步位置 change master to master_host='192.168.111.136', master_user='replicate', master_password='root', master_log_file='mysql-bin.000001', master_log_pos=107; # master_host : 主服务器 IP # master_user : 同步用户 # master_log_file : File 日志编号 # master_log_pos : Position 位置 # 刷新权限 flush privileges;查看从服务器状态
show sla ve status\G; # 关键要看的是: # Sla ve_IO_Running: Yes # Sla ve_SQL_Running: Yes # 两个 Yes 表示配置成功SQL 语言不区分大小写,所以写命令时不必纠结大小写。 测试同步 在主服务器 MySQL 中,创建表并插入数据:
use test;
create table tb_mobile(mobile varchar(20), time timestamp default now());
insert into tb_mobile (mobile) values('13456789898');
在从服务器 MySQL 中,查看是否同步成功:
use test; select * from tb_mobile;现在从服务器可以同步主服务器,但主服务器无法同步从服务器的操作。接下来配置主主复制,也就是从单向复制变成双向复制。
服务器 A:192.168.111.136 服务器 B:192.168.111.137 MySQL 用户:replicate MySQL 用户密码:root服务器 A 配置(192.168.111.136) 编辑 MySQL 配置文件:
vi /etc/my.cnf # 配置如下 [mysqld] server-id=1 log-bin=mysql-bin binlog-do-db=test binlog-ignore-db=mysql,information_schema,performance_schema # 添加以下配置以启用复制过滤器 replicate-do-db=test replicate-ignore-db=mysql,information_schema,performance_schema创建复制用户:
create user 'replicate'@'%' identified by 'root'; grant replication sla ve on *.* to 'replicate'@'%'; flush privileges; # % 表示任何主机记录二进制日志文件名和位置:
show master status;服务器 B 配置(192.168.111.137) 编辑 MySQL 配置文件:
vi /etc/my.cnf # 配置如下 [mysqld] server-id=2 log-bin=mysql-bin binlog-do-db=test binlog-ignore-db=mysql,information_schema,performance_schema # 添加以下配置以启用复制过滤器 replicate-do-db=test replicate-ignore-db=mysql,information_schema,performance_schema创建复制用户:
create user 'replicate'@'%' identified by 'root'; grant replication sla ve on *.* to 'replicate'@'%'; flush privileges;记录二进制日志文件名和位置:
show master status;配置双向复制 在服务器 A(192.168.111.136)上设置从服务器(指向服务器 B):从服务器 B 获取二进制日志文件名和位置,然后在服务器 A 上执行以下命令:
change master to master_host='192.168.111.137', master_user='replicate', master_password='root', master_log_file='mysql-bin.000001', -- 请使用服务器 B 实际的日志文件名 master_log_pos=107; -- 请使用服务器 B 实际的日志位置 start sla ve;在服务器 B(192.168.111.137)上设置从服务器(指向服务器 A):从服务器 A 获取二进制日志文件名和位置,然后在服务器 B 上执行以下命令:
change master to master_host='192.168.111.136', master_user='replicate', master_password='root', master_log_file='mysql-bin.000001', -- 请使用服务器 A 实际的日志文件名 master_log_pos=107; -- 请使用服务器 A 实际的日志位置 start sla ve;验证复制状态 在服务器 A 和 B 上分别验证复制状态:
show sla ve status\G;检查
Sla ve_IO_Running 和 Sla ve_SQL_Running 是否均为 Yes,同时确认没有错误信息。
最后,分别在服务器 A 和服务器 B 中插入数据,看看数据库是否互相同步:
use test;
insert into tb_mobile (mobile) values('13456789898');
select * from tb_mobile;
侠游戏发布此文仅为了传递信息,不代表侠游戏网站认同其观点或证实其描述