准备两个mysql服务器,这里是 192.168.159.1(主服务器)和 192.168.159.3(从服务器)
两个mysql版本是要一致的,我都是用的MySQL 8.0
然后主服务器中修改mysql的cnf文件([mysqld]下面)添加:
log-bin=mysql-bin #这是开启mysql的log 从服务器是读取log进行同步读取的
binlog-do-db=test #这是指定同步那个数据库 我自己建了个test库
server-id=1 #这是指定mysql服务的id,主从服务器中这个id是不能重复的,要保持一致
然后从服务器中需要修改mysql的cnf文件([mysqld]下面)添加:
log-bin=mysql-bin # 这个可以不加,没试过去掉这个,保险还是加上了
server-id=3 #这个是指定id,必须要设置的,然后不能和主mysql的一样
设置完配置后重启下mysql
support-files/mysql.server restart
然后主服务器创建新的用户 backup 密码设置为 repace 给他test库的权限
(当然用户和权限你们可以自定义,但是要有有 读取备份库的权限 ,我这里是给了test库的所有权限)
create user "backup"@"%" identified by "repace";
grant all privileges on test.* to 'backup'@'%';
然后获取主服务器的日志信息
show master status;
+------------------------+-----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------------+-----------+--------------+------------------+-------------------+
| mysql-bin.000001 | 2259 | | | |
+------------------------+-----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
这里需要的数据是File(mysql-bin.000001)和Position(2259)两个字段的值,在从服务器中配置时需要用到
然后切换到从服务器中,执行如下命令
change master to master_host='192.168.159.1',master_user='backup',master_password='repace',master_log_file='mysql-bin.000001', master_log_pos=2259;
其中参数master_host 是指定master服务器的ip,master_user是指定之前在主服务中创建的用户(就是专门用来进行主从服务器的同步),master_password是该用户的密码,master_log_file,master_log_pos这两个就是配置上面那个主服务器的那两个配置的。
执行成功后开启从服务:
start slave;
停止同步是 stop slave ;
然后查看信息
show slave status\G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.159.1
Master_User: backup
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000001
Read_Master_Log_Pos: 1950
Relay_Log_File: localhost-relay-bin.000003
Relay_Log_Pos: 322
Relay_Master_Log_File: mysql-bin.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
其中Slave_IO_Running和 Slave_SQL_Running 状态为yes应该是可以了的。
================================================================================
=================================其中曲折=========================================
================================================================================
遇到的坑:
1.密码问题
'caching_sha2_password' requires secure connection. Error_code: MY-002061
这个问题通过
ALTER USER 'backup'@'%' IDENTIFIED WITH mysql_native_password BY 'repace';
解决了,应该是密码格式问题导致的
============================================================================================
2.uuid 问题
[ERROR] [MY-013117] [Repl] Slave I/O for channel '': Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work. Error_code: MY-013117
这是因为我从服务器是从主服务器哪里镜像过来的,所以uuid一致导致的问题,改下
mysql的数据目录下的auto.cnf
vim /usr/local/mysql/data/auto.cnf
内容如下:
[auto]
server-uuid=2b948564-3f32-11ea-9cd6-000c29c46255
将这个uuid值稍微改下就好,但是要是16进制的,修改如下:
[auto]
server-uuid=2b948564-3f32-11ea-9cd6-000c29c46256
就改了最后那个5改成了6
保存下然后重启mysql就好了。