自己的虚拟机环境;
master:192.168.202.131
slave ;192.168.202.132
一、 主服务器配置
1、编辑/etc/my.cnf文件在mysqld下添加以下字段
server-id=131 #主服务器标识,主要是唯一性,没什么限制
log-bin=mysql-bin #指定二进制日志文件的名称
binlog-do-db=mysql #需要同步的数据库,
2、保存并重启mysql服务
3、设置读锁
mysql> flush tables with read lock;
mysql> flush privileges;
4、查看当前二进制日志名和偏移量值,从库按这个点开始进行数据恢复,之前的数据需要人工同步
[root@localhost ~]# mysql -uroot -p123456
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000005 | 409 | mysql | | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
5.刷新日志
mysql>flush logs; #因为刷新日志file的位置会+1,即File变成为:mysql-bin.000006
(很多问题出在这一步)
6、解除读锁
mysql> unlock tables;
7、在主服务器上为从服务器创建一个用于同步的用户
mysql>grant replication slave on *.* to u01@'192.168.202.%' identified by '123456';
此种方式做同步,这一步是必须要做的或者是已经授权过的,不然下面会 报错
二、从服务器配置
1、编辑/etc/my.cnf文件在mysqld下添加以下字段
server-id=132 #从服务器标识
log-bin=mysql-bin #与主服务器一致
replicate-do-db=mysql #同步的数据库
relay-log=relay_log #
2、保存并重启mysql服务
3、[root@localhost ~]# mysql -uroot -p123456
mysql>slave stop;#停止slave同步进程
#执行同步语句
mysql> change master to master_host='192.168.202.131',
-> -> master_user='root',
-> -> master_password='123456',
-> -> master_log_file='mysql-bin.000006',
#保持与主服务信息一致(因为在主服务器上已经刷新,所以file位置要加1)
-> -> master_log_pos=409; #保持主服务信息一致
mysql> start slave #开启slave同步进程
mysql> show slave status\G;
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
以上这两个参数的值为Yes,即说明配置成功!
三、 验证测试
1、在主库中新增一张表,添加测试数据
2、查看从库中是否完成同步
四:报错信息整改;
1、
Got fatal error 1236 from master when reading data from binary log: 'Client requested
master to start replication from impossible position'
主从的log-pos没有正确配好
2、
error reconnecting to master '[email protected]:3306' - retry-time: 60
连不通主机,确认是否有sql服务或者是否关闭防火墙
3、
启动从时报错:
mysql> start slave;
ERROR 1872 (HY000): Slave failed to initialize relay log info structure from the repository
原因:日志认证有问题
执行:mysql> reset slave,然后重新把以上sql语句写上去
五、
1、主从同步,经测试,是单向的,只有master数据库里面的东西能同步到slave,反之则不行
2.master重启sql服务对同步无影响
3.这种方式的同步,数据库内容不一致也可进行同步
4.主机和备机重启,不影响同步