注意几点:
1.主从服务器最好版本相同。
2.数据库内数据要保持一致。
3.主从的server_id是不能相同的,而且UUID也是不能相同的
我这里做的主从复制都是基于mysql5.7版本
主从复制
1.主服务器(master)开启二进制日志
[root@master ~]# vim /etc/my.cnf
log_bin=mysql-bin
server_id=1
重启
[root@master ~]# systemctl restart mysqld
2.从服务器(slave)开启中继日志
[root@slave ~]# vim /etc/my.cnf
relay_log=relay-bin
relay_log_index=slave-relay-bin.index
server_id=2
重启
[root@slave ~]# systemctl restart mysqld
这里我做的是主服务器mysql是有数据的,并不是空数据库,但从服务器是空的。
既然做的同步,主从服务器的数据要相同。
3.主服务器备份数据传到从服务器
[root@master ~]# mysqldump -uroot -p123.com -A > /tmp/all.sql
[root@master ~]# scp /tmp/all.sql 192.168.1.12:/tmp/
从服务器导入
[root@slave ~]# mysql -uroot -p123.com < /tmp/all.sql
4.在master创建用于同步的用户账号
mysql> grant replication slave on *.* to rep@'192.168.1.%' identified by '123.com';
5.查看master状态,文件名和位置
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000002 | 154 | | | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
6.在slave执行同步SQL语句(需要主服务器主机名,登陆凭据,二进制文件的名称和位置)
mysql> change master to
-> master_host='192.168.1.10',
-> master_user='rep',
-> master_password='123.com',
-> master_log_file='mysql-bin.000002',
-> master_log_pos=154;
7.启动slave服务器
启动命令:
mysql> start slave;
关闭命令:
mysql> stop slave;
8.查看slave状态
mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.1.10
Master_User: rep
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000002
Read_Master_Log_Pos: 446
Relay_Log_File: relay-bin.000002
Relay_Log_Pos: 612
Relay_Master_Log_File: mysql-bin.000002
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
这里主要看
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
当这两个都为Yes就表示同步成功了
9.验证
我在master服务器常见一个库,slave服务器也会同步。
master创建
mysql> create database helloslave;
slave查看
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| helloslave |
| mysql |
| performance_schema |
| sys |
| test |
+--------------------+
这里说一下如果UUID出现冲突该怎么办:
可以找到/usr/local/mysql/data/auto.cnf来修改或者直接删掉UUID重启