MySQL主从复制

1、修改主服务器的 my.cnf配置文件,添加如下内容:

#日志文件名称(自定义)
log-bin=master-zyf
#二进制日志的格式 有row、statement、mixed三种类型		
binlog-format=ROW		
#要求各个服务器的server-id必须不一样
server-id=1			
#同步的数据库的名称(不指定就是同步所有数据库)
#binlog-do-db=zyf
#设置不要复制的数据库(可设置多个)
binlog-ignore-db=mysql
binlog-ignore-db=information_schema

注意:

​ 如果my.cnf文件中使用的是引入其他文件

!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/

​ 则修改 /etc/mysql/mysql.conf.d/ 下的mysqld.cnf文件

2、进入mysql设置给从服务器登录用的账号

create user 'slave' identified by 'slave';
grant replication slave on *.* to 'slave'@'172.168.30.%' identified by 'slave';       #最后这个slave是设置登录的密码

3、授权成功之后在mysql中刷新一下

flush privileges

4、退出mysql重启主服务器的MySQL

service mysql restart

5、然后再次进入mysql,查看是否配置成功

show master status;

6、从服务器配置(my.cnf)

#日志文件(和主服务器上的一样)
log-bin=master-zyf
#二进制日志的格式,跟主服务器一样
binlog-format=ROW
#要求各个服务的server-id必须不一样
server-id=2
#中继日志执行后,这些变化是否需要计入到自己的binarylog。
#当你的从服务器需要作为另外一个服务器的主服务器的时候需要设置为true,就是双主互相备份,或者多主循环备份。
#log-slave-updates=true

7、从服务器配置完成后也要重启mysql

service mysql restart

8、配置从服务器连接主服务器,再次进入从服务mysql,输入:

change master to 
	master_host='172.168.30.2',master_user='slave',master_password='slave',master_port=3306,master_log_file='master-zyf.000014',master_log_pos=154;

注意 此处的 master_log_file 和 master_log_pos 是上面主服务器 show master status; 指令查询出来的值

报错:

ERROR 3021 (HY000): This operation cannot be performed with a running slave io thread; run STOP SLAVE IO_THREAD FOR CHANNEL '' first.

错误原因是 mysql从机上已经进行过绑定了,如果继续绑定需要先进行重置。

解决办法:

​ 1、停止已经启动的绑定

stop  slave

​ 2、重置绑定

reset master

​ 3、执行复制主命令

change master to 
	master_host='172.168.30.2',master_user='slave',master_password='slave',master_port=3306,master_log_file='master-zyf.000014',master_log_pos=154;

​ 4、发现此时已经不报错

​ 5、启动复制

start slave

9、连接成功后开启从服务器

start slave;

10、然后在从服务器的mysql中查看连接状态

show slave status \G;

必须保证这两个连接都为YES才连接成功:

Slave_IO_Running: Yes
Slave_SQL_Running: Yes

报错:

The slave I/O thread stops because master and slave have equal MySQL server UUIDs

​ 原因:导致原因是因为从服务器是直接从主服务器哪里克隆过来的,所以server-uuid是一样的

解决:

​ 1、首先要查找到mysql的安装地址

show variables like 'datadir';

+---------------+-----------------+
| Variable_name | Value           |
+---------------+-----------------+
| datadir       | /var/lib/mysql/ |
+---------------+-----------------+
1 row in set (0.00 sec)



​ 2、然后通过mysql生成一个uuid进行记录等会用于修改

select uuid()

+--------------------------------------+
| uuid()                               |
+--------------------------------------+
| 2674149f-5083-11e8-be4b-080027a1f331 |
+--------------------------------------+

​ 3、然后进入datadir目录 修改 server-uuid

cd /var/lib/mysql/
vim auto.cnf

​ 4、重启mysql

service mysqld restart

OVER!