使用主从同步的优点:
使用主服务器做写操作,从服务器做读操作。这样可以使得应用查询更快。不过也有一个缺点就是当主服务器频繁的更新会导致从服务器的数据不稳定或有较大的延迟。
准备材料:
- 一台做master的MySQL。ip:192.168.0.105 port:3300
- 一台做slave的MySQL。 ip:192.168.0.104 prot:3301
在两台服务器的MySQL分别创建一个相同结构的库和表,方便后期测试。
步骤一:
登录masterMySQL,找到MySQL的配置文件。我这里的mysql文件的路径如下/etc/mysql/mysql.conf.d/mysqld.cnf用vim打开mysqld.cnf文件,把如下语句配置进去
[mysqld]
log-bin=mysql-bin #开启二进制日志
server-id=1 #设置server-id
步骤二:
重启master数据库,然后创建用户
mysql> CREATE USER 'wg'@'%' IDENTIFIED BY '123456';#创建用户
mysql> GRANT REPLICATION SLAVE ON *.* TO 'wg'@'%';#分配权限
mysql>flush privileges; #刷新权限
创建成功后可以查看master状态
SHOW MASTER STATUS;
步骤三:
重新登录到slave的mysql
打开slave数据库,找到配置文件,这里的配置文件路径和master一致都是/etc/mysql/mysql.conf.d/mysqld.cnf,在配置文件里面添加
[mysqld]
server-id=2 #设置server-id,必须唯一
保存重启
步骤四:
设置mysql的slave参数
mysql> CHANGE MASTER TO
-> MASTER_HOST='182.92.172.80',
-> MASTER_PORT=3300
-> MASTER_USER='wg',
-> MASTER_PASSWORD='123456',
-> MASTER_LOG_FILE='mysql-bin.000003',
-> MASTER_LOG_POS=73;
注意master_port的端口需要自己设置,我这里是用的docker配置所以配置了3300,默认是3306,master_log_file和master_log_pos分别填写我步骤二里面画红框的内容。
设置完成开启slave服务
start slave
若是发现slave参数配置错误,则可以stop slave重新进行步骤四的配置,然后再输入start slave进行开启服务。
步骤五:
检查是否开启成功
mysql> show slave status\G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 182.92.172.80
Master_User: rep1
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000013
Read_Master_Log_Pos: 11662
Relay_Log_File: mysqld-relay-bin.000022
Relay_Log_Pos: 11765
Relay_Master_Log_File: mysql-bin.000013
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
...
如果红框内的2个runing 都是YES则开启成功。