服务器:主服务器ip 172.31.242.249 、从服务器ip 172.31.242.250 两台服务器的MySQL版本保持一致
原理:MySQL要做到主从复制,其实依靠的是二进制日志,即:假设主服务器叫A,从服务器叫B;主从复制就是 B跟着A学,A做什么,B就做什么。那么B怎么同步A的动作呢?现在A有一个日志功能,把自己所做的增删改查的动作全都记录在日志中,B只需要拿到这份日志,照着日志上面的动作施加到自己身上就可以了。
1、首先修改mysql的配置文件,使其支持二进制日志功能
打开主服务器的mysql配置文件:my.conf
vi /etc/my.cnf
加入如下三行代码:
#将mysql二进制日志取名为mysql-bin
log-bin=/var/lib/mysql/bin-log/mysql-bin
#二进制日志的格式,有三种:statement/row/mixed,具体分别不多做解释,这里使用mixed
binlog_format=mixed
#为服务器设置一个独一无二的id便于区分,这里使用ip地址的最后一位充当server-id
server-id=249
配置完成 :wq 保存,重启MySQL
systemctl restart mysqld.serivce
同样的,进入从服务器,配置从服务器的my.cnf,重复步骤1即可。
唯一的区别是,server-id要改成从服务器的ip尾位,即server-id=250;其他两项是一样的,保存,并重启MySQL;
2、在主服务器上为从服务器分配一个账号
进入主服务器的mysql界面,
mysql -u root -proot #我这里mysql账号是root,密码是root
在mysql操作界面下,输入下面一行命令:
GRANT replication slave ON *.* TO 'slave'@'%' IDENTIFIED BY 'root';
3、查看主服务器BIN日志的信息
进入主服务器的mysql界面,
show master status #记录下file、position这两个值
进入从服务器mysql
mysql -u root -proot
关闭slave(如果你以前配置过主从的话,一定要先关闭)
stop slave;
4、开始配置主从同步
从服务器MySQL命令行下输入下面代码即可:
CHANGE MASTER TO
MASTER_HOST="172.31.242.249",
MASTER_USER="root",
MASTER_PASSWORD="root",
MASTER_LOG_FILE="mysql-bin00001", #show master status 中的file值
MASTER_LOG_POS=250; #show master status 中的position值
备注:
MASTER_HOST : 设置要连接的主服务器的ip地址
MASTER_USER : 设置要连接的主服务器的用户名
MASTER_PASSWORD : 设置要连接的主服务器的密码
MASTER_LOG_FILE : 设置要连接的主服务器的bin日志的日志名称,即第3步得到的信息
MASTER_LOG_POS : 设置要连接的主服务器的bin日志的记录位置,即第3步得到的信息(这里注意,最后一项不需要加引号。)
启动从服务器开始复制:
start slave;
5、查看是否配置成功
show slave status \G #\G可以让执行结果格式化,代替;号是个不错的选择
Slave_IO_Running、Slave_SQL_Running均为Yes代表成功
特别强调。
MySQL的主从复制无法保证100%永远不出问题,主从一旦断开,程序无法及时发现将是巨大灾难,强烈建议各位程序员对从服务器加监听(死循环show slave status
),一旦发现异常,直接将从切换至主,保证数据的一致性。