1、修改主服务器配置文件
vim /etc/my.cnf
[mysqld]
#在mysqld下面增加以下两行
log-bin=mysql-bin
server-id=1
#完成之后需要重启mysql服务
2、创建一个用于主从同步的用户slave,以下设置仅允许在10.50.6.5上连接此数据库
mysql> grant replication slave on *.* to 'slave'@'10.50.6.%' identified by '123456';
mysql> flush privileges;
3、如果主库里面有数据需要进行锁表,数据备份并手动还原到从库
mysql> flush tables with read lock;
mysql> quit;
mysqldump -uroot -p [库名] >[库名].sql
例如:mysqldump -uroot -p test >test.sql
# 为了方便以下操作全都以test为库名进行操作
#主库在mysql-shell里面执行以下命令
mysql> show master status;
记住file和Position的值,下面配置需要用到
4、从服务器配置,同样在my.cnf文件添加一下内容,注意server-id是唯一性不得与其他从服务器和主服务器重复
vim /etc/my.cnf
[mysqld]
# 在mysqld下面添加以下两行
log-bin=mysql-bin
server-id=2
#保存退出重启mysql服务
systemctl restart mysql
# 从服务器的log-bin可以配置也可以不配置
# 为了以后可以在从服务器上进行数据备份和灾难恢复
# 或者某一天使从服务器变为主服务器
# 在从库还原数据
mysql -uroot -p
Enter password:
mysql> create database test;
mysql> use test;
mysql> source /root/test.sql;
5、登录mysql,配置从服务器同步参数
mysql> change master to
-> master_host='10.50.6.16',
-> master_user='slave',
-> master_password='123456',
-> master_log_file='mysql-bin.000001',
-> master_log_pos=199;
# master_log_pos的值千万不要加引号
# 启动同步进程
mysql> start slave;
# 查看状态
mysql> show slave status \G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 10.50.6.16
Master_User: slave
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000001
Read_Master_Log_Pos: 199
Relay_Log_File: mysqld-relay-bin.000003
Relay_Log_Pos: 283
Relay_Master_Log_File: mysql-bin.000001
Slave_IO_Running: Yes #此处为yes,负责从库去主库读取二进制日志并写入到从库的中继日志
Slave_SQL_Running: Yes #此处为yes,负责将中继日志转换成sql语句后执行
...
1 row in set (0.00 sec)
#上述状态中以下两个参数都为yes则配置成功
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
6、验证
# 在主库创建任意表
mysql> user hellodb;
# 创建之前的状态
mysql> show tables;
+-------------------+
| Tables_in_hellodb |
+-------------------+
| classes |
| coc |
| courses |
| scores |
| students |
| teachers |
| toc |
+-------------------+
mysql> create table test_tables ( id INT(111), name varchar(256) );
# 创建之后的状态
mysql> show tables;
+-------------------+
| Tables_in_hellodb |
+-------------------+
| classes |
| coc |
| courses |
| scores |
| students |
| teachers |
| test_tables |
| toc |
+-------------------+
# 从库查一下是否增加了test_tables的表
6、排错小知识
如果执行
mysql> start slave;
mysql> show slave status \G;
发现 Slave_SQL_Running: No
检查主服务器和从服务器的/var/lib/mysql/auto.cnf文件UUID是否相同,如果相同删除任何一个服务器的此文件重启服务器即可