主从复制nginx
前言:准备两台MySQL,一台主(Master)服务器,一台从(Slave)服务器,主库的数据变更,需要同步到从库中(主从复制)。而用户在访问我们项目时,如果是写操作(insert、update、delete),则直接操作主库;如果是读(select)操作,则直接操作从库(在这种读写分离的结构中,从库是可以有多个的),这种结构我们称为 读写分离 。
1 准备工作
(1)准备两台服务器,并且在服务器中安装MySQL,MYSQL的版本5.7.25
(2)防火墙开放3306端口号


firewall-cmd --zone=public --add-port=3306/tcp --permanent firewall-cmd --zone=public --list-ports
firewall-cmd --zone=public --list-ports
(3)并将两台数据库服务器启动起来,并登录MySQL,验证是否正常启动

systemctl start mysqld
2 主库的配置
(1)修改根目录修改Mysql数据库的配置文件/etc/my.cnf将以下信息配置进去

log-bin=mysql-bin #[必须]启用二进制日志
server-id=200 #[必须]服务器唯一ID(唯一即可)
(2)重启MYSQL服务

systemctl restart mysqld
(3)创建数据同步的用户并授权并且登录mysql,并执行如下指令,创建用户并授权

GRANT REPLICATION SLAVE ON *.* to 'xiaoxiongge'@'%' identified by 'Root@123456';
(4) 登录Mysql数据库,查看master同步状态并且执行下面SQL,记录下结果中File和Position的值。注意:下面SQL的作用是查看Master的状态,执行完此SQL后不要再执行任何操作

show master status;
3 从库的配置
(1)修改根目录修改Mysql数据库的配置文件/etc/my.cnf将以下信息配置进去
server-id=201 #[必须]服务器唯一ID
(2)重启MYSQL服务

systemctl restart mysqld
(3)登录Mysql数据库,设置主库地址及同步位置并且重启服务


change master to master_host='192.168.200.200',master_user='xiaoming',master_password='Root@123456',master_log_file='mysql-bin.000001',master_log_pos=154;
start slave;

(4)查看从数据库的状态,然后通过状态信息中的 Slave_IO_running 和 Slave_SQL_running 可以看出主从同步是否就绪,如果这两个参数全为Yes,表示主从同步已经配置完成
show slave status\G;

注意:如果从库有再用库, Slave_SQL_running这个参数会变成NO。解决方法:在数据库的配置文件/etc/my.cnf文件slave_skip_errors=1146添加进去
4测试MYSQL的读写分离是否成功
验证写入到主库
(1)测试主库写入,先关闭从库的服务

(2)在客户端修改数据

(3)此时能在主库查到已修改的数据而从库没有修改
验证查询分离从库
(1)关闭从服务器

(2)修改主数据库的信息,查看从数据库是否可以获取到更新的数据


浙公网安备 33010602011771号