mysql主从配置
1、从《高性能mysql》书中讲解主从原理大致有三个步骤:
在主库上把数据更改记录到二进制日志中(Binary Log)中,这些记录称为二进制日志事件。
从库通过IO线程将主库上的日志复制到自己的中继日志(Relay Log)中。
从库通过SQL线程读取中继日志中的事件,将其重放到自己数据上。
原理图为:
我的机器:
主:192.168.0.191
从:192.168.0.192
2、主库配置:
修改my.conf:vi /etc/my.cnf 添加配置
# 服务的唯一编号 server-id = 1 # 开启mysql binlog功能 log-bin = mysql-bin # binlog记录内容的方式,记录被操作的每一行 binlog_format = ROW # 减少记录日志的内容,只记录受影响的列 binlog_row_image = minimal # 指定需要复制的数据库名为my_db binlog-do-db = my_db
重启mysql服务
service mysqld restart
创建从库同步数据的账号,进入mysql终端
grant replication slave on *.* to 'my_user'@'192.168.0.192' identified by 'Ly.123456';
flush privileges;
查看主库状态:
show master status\G;
主库配置完成。
3、从库配置
修改my.conf:vi /etc/my.cnf 添加配置
# 服务的唯一编号 server-id = 2 # 开启mysql binlog功能 log-bin = mysql-bin # binlog记录内容的方式,记录被操作的每一行 binlog_format = ROW # 减少记录日志的内容,只记录受影响的列 binlog_row_image = minimal # 指定需要复制的数据库名为my_db replicate-do-db = my_db
重启mysql服务
service mysqld restart
进入mysql终端
执行命令:change master to master_host='192.168.0.191',master_user='my_user',master_password='Ly.123456',master_log_file='mysql-bin.000003',master_log_pos=154;
start slave;
查看状态:show slave status \G
如果两个都是yes就是ok。刚开始的时候,我的第一个显示是NO,如下:
因为是,我是在虚拟机上先在主库所在机器装了mysql,然后克隆一台机器出来,做从节点,就导致了UUID是一样的。
停掉两台mysql服务,删除auto.cnf
启动mysql服务,再看看是不是两个都是yes,一定要仔细看master和slave的状态里的文件是否一致。
这样就能进行数据同步了。