1.前言
1.关于读写分离的原理,这里不做太多赘述。主要从服务器去读取主服务的binlog日志,完成数据同步的过程。
这里我在mac开启了2个虚拟机,ip分别为192.168.31.109 ,192.168.31.208系统为centos
2.配置主从分离之前,需要安装mysql,并关闭防火墙,用mysql客户端连接测试是否可以连接成功。
2.配置
1.进入主服务器/etc 文件夹,编辑my.cnf文件
[mysqld]
## 设置server_id,同一局域网中需要唯一
server_id=101
## 指定不需要同步的数据库名称
binlog-ignore-db=mysql
## 开启二进制日志功能
log-bin=mall-mysql-bin
## 设置二进制日志使用内存大小(事务)
binlog_cache_size=1M
## 设置使用的二进制日志格式(mixed,statement,row)
binlog_format=mixed
## 二进制日志过期清理时间。默认值为0,表示不自动清理。
expire_logs_days=7
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062
2.重启主服务器
systemctl restart mysqld
3.进入mysql命令行,添加同步数据的用户,并授权
mysql -uroot -p;
create user 'slave'@'%' IDENTIFIED BY 'Dcdell88@';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
由于mysql8.0密码的加密插件有改变,如果在从服务器出现4 message: Authentication plugin 'caching_sha2_password' reported error: Authentication requires secure connection的错误的时候,请按照下面的命令添加用户,并且需要重新开启同步。
ALTER USER 'slave'@'%' IDENTIFIED WITH mysql_native_password BY 'Dcdell88@';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
4.进入从服务器,编辑my.cnf文件,配置文件如下
[mysqld]
## 设置server_id,同一局域网中需要唯一
server_id=102
## 指定不需要同步的数据库名称
binlog-ignore-db=mysql
## 开启二进制日志功能,以备Slave作为其它数据库实例的Master时使用
log-bin=mall-mysql-slave1-bin
## 设置二进制日志使用内存大小(事务)
binlog_cache_size=1M
## 设置使用的二进制日志格式(mixed,statement,row)
binlog_format=mixed
## 二进制日志过期清理时间。默认值为0,表示不自动清理。
expire_logs_days=7
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062
## relay_log配置中继日志
relay_log=mall-mysql-relay-bin
## log_slave_updates表示slave将复制事件写进自己的二进制日志
log_slave_updates=1
## slave设置为只读(具有super权限的用户除外)
5.重启从服务器
systemctl restart mysqld
6.查看主服务的状态
show master status;
这里需要记录,fileGtid_set 和Position这两个字段,后面配置从服务器需要用到。
7.进入从服务器,配置主从服务信息 相关的字段解释如下,操作在mysql命令行下进行的。
master_host:主数据库的IP地址;
master_port:主数据库的运行端口;
master_user:在主数据库创建的用于同步数据的用户账号;
master_password:在主数据库创建的用于同步数据的用户密码;
master_log_file:指定从数据库要复制数据的日志文件,通过查看主数据的状态,获取File参数;
master_log_pos:指定从数据库从哪个位置开始复制数据,通过查看主数据的状态,获取Position参数;
master_connect_retry:连接失败重试的时间间隔,单位为秒。
change master to master_host='192.168.31.109', master_user = 'slave', master_password='Dcdell88@', master_port=3306 , master_log_file='mall-mysql-bin.000001',master_log_pos=1219, master_connect_retry=30;
8.在从服务器开启主从同步
start slave;
9.查看从服务器的主从同步的状态
Show slave status \G;
如果出现图中所示的Slave_IO_Running: Connecting 需要重新到主服务添加用户,并且,重新配置主从服务。添加用户可以看第三部后面的指令进行。
然后我们主服务器,创建表,添加数据,就可以看到从数据库会进行自动同步。
我的博客,如果有帮到您的话,请点赞并关注吧。