CentOS 7 MySQL 5.6 主从复制
主从复制的作用:
一、准备工作
- 虚拟机上安装一个
CentOS 7
服务器192.168.25.130
Master - 在CentOS服务器上安装
MySQL 5.6
,并创建一个用户mysql1
密码mysql1
- 在用虚拟机克隆一个
CentOS 7
,并修改静态ip192.168.25.132
Slave
二、配置服务器
-
Master
服务器给从服务器账号mysql1
授权在 Master 的数据库中建立一个复制账户,每个 Slave 使用该账户连接 Master 进行复制,需要
replication slave
和replication client
权限,Master 的连接信息会存储在文本文件master.info
文件中。## 连接`root`给`mysql1`授权 [root@centos ~]# mysql -uroot -p Enter password: mysql> grant replication slave,replication client on *.* to 'mysql1'@'192.168.25.132' identified by 'mysql1'; mysql>FLUSH PRIVILEGES; mysql> quit;
说明:创建了一个用户名为 mysql1的用户,密码为 mysql1,只允许在 192.168.25.132 这个 Slave 上登录。
可将192.168.25.132设置为*,表示可以在局域网内的Slave登录 -
修改(master与slave)my.cnf文件
vi /etc/my.cnf [mysqld] ## 新增以下内容 server_id=130 ## 服务器id必须是唯一存在(master 130, slave 132) log-bin=mysql-bin ## 开启日志文件
-
重启mysql服务
[root@centos ~]# service mysqld restart
-
slave连接master
CHANGE MASTER TO MASTER_HOST = '192.168.25.130', #另一台机器的地址 MASTER_PORT = 3306, #另一台机器的端口 MASTER_USER = 'mysql1',#另一台机器上第一步分配的用户名 MASTER_PASSWORD = 'mysql1', #另一台机器上第一步分配的密码 MASTER_LOG_FILE = 'mysql-bin.000001',#另一台机器上执行SHOW MASTER STATUS得到的文件名 MASTER_LOG_POS = 192; #另一台机器上执行SHOW MASTER STATUS得到的偏移量
-
启动slave,并查看slave启动是否成功启动
START SLAVE; # 启动slave
SHOW SLAVE STATUS; # 查看slave状态
成功了的状态
在配置过程中,我遇到两个问题
- Slave_IO_Running为NO
造成原因:由于mysql是通过另一台虚拟机克隆的。
解决方案:修改[root@centos ~]# vi /var/lib/mysql/auto.cnf
中的server-uuid
(局域网内必须是唯一的)
参考:mysql主从复制之异常解决— Slave_IO_Running: NO 之三大原因- Slave_SQL_Running为NO
造成原因:同步前主从数据库数据不一致。
解决方案:将主数据库备份到从数据库。
参考:mysql主从同步注意事项
三、主从服务器常用命令
-
主服务器相关命令
mysql>show master status; # 查询master服务器状态 mysql>show slave hosts; # 查询master的slave相关信息 mysql>show binlog events; # mysql执行改动产生的二进制日志文件, 两个作用: #(1)数据回复 #(2) 主从数据库。用于slave端执行增删改,保持与master同步。 mysql>show binary logs;
-
从服务器相关命令
mysql>slave start; # 启动slave mysql>slave stop; #关闭slave mysql>SLAVE STOP IO_THREAD; # 此线程把master段的日志写到本地 mysql>SLAVE start IO_THREAD; mysql>SLAVE STOP SQL_THREAD; # 此线程把写到本地的日志应用于数据库 mysql>SLAVE start SQL_THREAD; mysql>reset slave; mysql>SET GLOBAL SQL_SLAVE_SKIP_COUNTER; mysql>load data from master; mysql>show slave status; //SUPER,REPLICATION CLIENT mysql>CHANGE MASTER TO MASTER_HOST=127.0.0.1, MASTER_PORT=3306,MASTER_USER=user, MASTER_PASSWORD=pwd; //动态改变master信息