mysql主从复制主要作用是为了降低主服务器mysql的读压力。
文章背景:
1、在本地搭建两个linux虚拟机,其主服务器ip为192.168.0.1,从服务器ip为192.168.0.2。
2、主服务器只搭建了mysql,从服务器搭建了lnmp测试环境。
注明:测试主从mysql服务器都可以正常运行连接。
进行主从复制需要以下几个步骤:
1、开放主从服务器的3306端口。
2、主服务器mysql配置文件my.cnf中[mysqld]后配置
basedir = /usr/local/lnmp/mysql-5.7
datadir = /usr/local/lnmp/mysql-5.7/data
port = 3306
server_id = 1
socket = /usr/local/lnmp/mysql-5.7/mysql.sock
log-bin = mysql-bin
必须配置server_id与log-bin,主从服务器的server_id必须设置且唯一。log-bin为开启二进制日志。
配置后重启。
3、主服务创建用户。
可以通过SQLlog等工具创建用户。
用户名为:test (一会需要用到),主机为%或者192.168.0.%(前者为任意ip可以连接,后者为限制192.168.0.*号段连接),密码为,test(一会需要用到),并添加全局权限REPLICATION SLAVE (小写为replication slave);
4、从主服务导出测试数据库test,然后在从数据库中导入测试数据库test。
5、数据库连接之后执行sql:show master status;获取FILE为mysql-bin.000004(一会需要用到),position为1230(一会需要用到);
6、从服务器mysql配置文件my.cnf中[mysqld]后配置
basedir = /usr/local/lnmp/mysql-5.7
datadir = /usr/local/lnmp/mysql-5.7/data
port = 3306
server_id = 2
socket = /usr/local/lnmp/mysql-5.7/mysql.sock
log-bin = mysql-bin
#replicate-do-db=test #指定数据库被复制
#replicate-ignore-db=test #指定数据库不被复制
必须配置server_id,主从服务器的server_id必须设置且唯一。log-bin为开启二进制日志。
7、重启从服务器mysql,使用命令mysql -h127.0.0.1 -uroot -p后输入密码连接mysql。
执行sql: stop slave;(如果之前配置过主从则关闭之前,否则暴露一个警告可以忽略)
执行sql:change master to master_host='192.168.0.1'(主服务器ip), master_user='test'(刚刚设置的账号),master_password='test'(刚刚设置的密码),master_log_file='mysql-bin.000004'(show master status;获取的FILE),master_log_pos=2022(show master status;获取的position);(本sql为设置主从配置)
执行sql:start slave;(开启主从配置)
8、查看主从复制是否正常。
mysql命令行中执行:show slave status G
查看Slave_IO_Running与Slave_SQL_Running,当两个参数的状态都是yes如下:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
则证明mysql主从复制状态为正常运行的状态。
主从配置完成,现在在主服务中进行添加,修改,删除操作,从服务器中也会做相应的操作。
警告:主从复制的增加,修改,删除操作只能在主服务进行,如果再从服务器进行了添加,修改,删除操作,则主从配置失效。
注明:笔者在it行业的工作年限不长,如果有什么不对的,希望大家指出。本文小括号()内为注释,辅助说明。