MySQL主从同步
让mysql-1成为主,mysql-2成为从,也就是让mysql-2可以自动同步mysql-1的指定数据库,反之不行。
mysql-1:192.168.168.130
mysql-2:192.168.168.131
服务器的版本信息:
[root@localhost ~]# cat /etc/redhat-release
CentOS release 6.9 (Final)
[root@localhost ~]#
[root@localhost ~]# uname -r
2.6.32-696.el6.x86_64
MySQL主从服务器都要在防火墙打开TCP 3306端口:
iptables -I INPUT -p tcp --dport 3306 -j ACCEPT
iptables-save > /etc/sysconfig/iptables
MySQL主从服务器都要关闭SELinux:
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
MySQL5.6的安装可参考:Apache2.2+MySQL5.6+PHP5.6+phpMyAdmin+GLPI
mysql-1
创建测试用的库和表:
create database data1;
use data1;
create table class1 (id int,name varchar(6));
create database data2;
use data2;
create table class2 (id int,name varchar(6));
如下图:
修改MySQL的主配置文件:
[root@mysql-1 ~]# vi /etc/my.cnf
#在[mysqld]下面修改:(如果没有就手动添加)
server-id=1 # 每台MySQL服务器的ID必须是唯一的
log-bin=binlog # 启用日志
#在[mysqld]下面追加:
binlog-do-db=data1 # 指明同步的库
binlog-do-db=data2
如下图:
修改完配置文件后,MySQL服务必须可以重启成功:
mysql-1赋予mysql-2可使用的权限账号 ( 用户名:happy,远程客户端可访问IP:192.168.168.131,密码:888 ):
mysql> grant replication slave on *.* to happy@192.168.168.131 identified by '888';
显示mysql-1的master信息:
mysql> show master status;
注释:mysql-2进行同步时要用到的数据信息(binlog.000001、333)
只备份data1和data2这两个库,备份出来的文件名为/backup.sql
[root@mysql-1 ~]# mysqldump -u"root" -p"888" --master-data=1 --databases data1 data2 > /backup.sql
注释:加上 --master-data=1 就不用锁表。
在mysql-1将/backup.sql,通过scp命令传到mysql-2的目录/root下:
[root@mysql-1 ~]# scp
-bash: scp: command not found
笺注:两台服务器都要安装scp命令:
[root@mysql-1 ~]# yum -y install openssh-clients
[root@mysql-1 ~]# scp -rp /backup.sql root@192.168.168.131:/root
root@192.168.168.131's password: #输入192.168.168.131的系统用户root的密码
backup.sql 100% 2628 2.6KB/s 00:00
mysql-2
修改MySQL的主配置文件:
[root@mysql-2 ~]# vi /etc/my.cnf
#在[mysqld]下面修改:(如果没有就手动添加)
server-id=2 # 每台MySQL服务器的ID必须是唯一的
如下图:
修改完配置文件后,MySQL服务必须可以重启成功:
导入数据库:
[root@mysql-2 ~]# mysql -u"root" -p"888" < /root/backup.sql
在从数据库上进行同步:(mysql-2)
stop slave;
change master to master_host='192.168.168.130',
master_user='happy',
master_password='888',
master_log_file='binlog.000001',master_log_pos=333;
start slave;
如下图:
在mysql-2上查看从库状态,确认以下两项的参数都为Yes( show slave status\G; )
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
######
主从测试
mysql-1:
mysql> use data1;
mysql> create table class11 (id int,name varchar(6));
mysql> use data2;
mysql> create table class22 (id int,name varchar(6));
mysql-2:
笺注:
实验中,主从同步成功;
实验中,两台MySQL服务器不论顺序重启后,同步都是正常的;
主服务器(mysql-1)重启后,其master信息会自动改变的:
从服务器(mysql-2)理应会自动同步主服务器(mysql-1)的master信息:
#########
MySQL主主同步(让mysql-2也成为mysql-1的主,让mysql-1可以自动同步mysql-2的指定数据库)
mysql-2
修改MySQL的主配置文件:
[root@mysql-2 ~]# vi /etc/my.cnf
#在[mysqld]下面修改:(如果没有就手动添加)
server-id=2 # 每台MySQL服务器的ID必须是唯一的
log-bin=binlog # 启用日志
#在[mysqld]下面追加:
binlog-do-db=data1 # 指明同步的库
binlog-do-db=data2
如下图:
修改完配置文件后,MySQL服务必须可以重启成功:
mysql-2赋予mysql-1可使用的权限账号 ( 用户名:happy,远程客户端可访问IP:192.168.168.130,密码:888 ):
mysql> grant replication slave on *.* to happy@192.168.168.130 identified by '888';
显示mysql-2的master信息:
mysql> show master status;
######
回到mysql-1:(这次在mysql-1上进行同步;总之就是在MySQL从服务器上进行同步)
stop slave;
change master to master_host='192.168.168.131',
master_user='happy',
master_password='888',
master_log_file='binlog.000001',master_log_pos=333;
start slave;
如下图:
在mysql-1上查看从库状态,确认以下两项的参数都为Yes( show slave status\G; )
######
主主测试
mysql-2:
mysql> use data2;
mysql> create table class28 (id int,name varchar(6));
mysql-1:
###
mysql-1:
mysql> use data1;
mysql> create table class18 (id int,name varchar(6));
mysql-2:
笺注:
实验中,主主同步成功;
实验中,两台MySQL服务器不论顺序重启后,同步都是正常的;
######
假如,有某台从服务器的MySQL同步失败:
mysql> show slave status\G;
解决方法:
1. 先到对应的MySQL主服务器,查看master信息;
2. 再到MySQL从服务器重新再做一次同步;
相关文章:
Zabbix调用Python3脚本监控MySQL主从同步状态
Zabbix使用模板监控MySQL主从同步状态
Zabbix5.0.12_使用模板监控MySQL主从同步状态
CentOS8_Mycat实现MySQL的读写分离
Keepalived双机热备+MySQL
MySQL5.5主从同步
MariaDB主从同步 |