MySQL数据库主从复制实现步骤及可能出现问题解决
一:mysql主从复制的实现原理
原理:MySQL要做到主从复制,其实依靠的是MySQL的二进制日志,即:假如主服务器是a,从服务器是b;
主从复制就是:b跟着a学,a做什么,b就跟着做什么
b怎么同步a的动作呢:a有一个日志功能,会把自己的增删改查的操作记录到这个日志中,b拿到这个日志,将日志里面的操作在自己身上做一遍就可以了,这样就实现的主从复制
二、测试环境
两台虚拟机lnmp:centos6.5,PHP:7.2.19,MySQL:5.5
主服务器:192.168.10.129 数据库 密码:root 密码:root
从服务器:192.168.10.130 数据库 密码:root 密码:root
文章图片
文章图片
三、开始配置主从数据库
1、配置主数据库
1.1、打开主服务器的配置文件,修改配置信息
vi /etc/my.cnf
文章图片
配置如下信息:
文章图片
这些配置信息有些是默认打开的,如果没有打开就把前面的#去掉
log-bin=mysql-bin //将MySQL二进制日志取名为mysql-bin
binlog_format=mixed //二进制日志的格式,有三种:statement/row/mixed,具体分别不多做解释,这里使用mixed
server-id = 1也行。或者设置为ip尾号也行,为服务器设置一个独一无二的id便于区分
其实主服务器的配置文件不需要怎么修改
1.2、重启服务:我的环境为lnmp
所以我的重启命令可以是:service mysql start 或者 service mysqld start 或者 lnmp restart 或者 lnmp mysql restart 四个选其一。总有一个适合你
文章图片
1.3、进入mysql,给从服务器配置一个可以登录的账号,就像一把钥匙,从服务器拿着这个钥匙,才能到主服务器上来共享主服务器的日志文件。
进入MySQL:mysql -uroot -p
文章图片
给从服务器配置一个可以登录的账号:
命令:grand all on . to ‘账号名’@‘从服务器ip’ identified by ‘密码’
例如:grand all on . to ‘root’@‘192.168.10.130’ identified by ‘root’;
文章图片
文章图片
刷新权限:flush privileges;
接着输入命令:show master status;
文章图片
记住这两个值,一会从服务器配置要用
查看一下当前的用户
select user , host ,password from mysql.user;
文章图片
可以看到刚才添加的账号已经存在
2、开始配置从数据库
2.1、编辑从数据库的my.cnf文件,跟主库的操作一样
文章图片
重启服务,跟主数据库一样,复制上面的命令就行,不多说
2.2、给从数据库进行配置
首先要关闭slave(如果以前配置过主从的话,一定要先关闭,如果没有可以跳过)
stop slave;
mysql>change master to
master_host=‘192.168.10.129’,//这里是主数据库的ip
master_user=‘root’,//刚才在主数据库添加的用户名
master_password=‘root’,//刚才主数据库添加的密码
master_log_file=‘mysql-bin.000010’,//从哪个bin-log开始同步,刚才主库中让你记住的,show master status;
master_log_pos=246;
//同上
参数解释:MASTER_HOST : 设置要连接的主服务器的ip地址
MASTER_USER : 设置要连接的主服务器的用户名
MASTER_PASSWORD : 设置要连接的主服务器的密码
MASTER_LOG_FILE : 设置要连接的主服务器的bin日志的日志名称,即第3步得到的信息
MASTER_LOG_POS : 设置要连接的主服务器的bin日志的记录位置,即第3步得到的信息,(这里注意,最后一项不需要加引号。否则配置失败)
完整命令:change master to master_host=‘192.168.10.129’, master_user=‘root’, master_password=‘root’, master_log_file=‘mysql-bin.000010’, master_log_pos =246;
文章图片
接着执行start slave;
文章图片
最后查看配置结果
show slave status \G这个命令
千万不要在后面跟;
分号,会影响显示效果
文章图片
出现这个问题,分析问题
是否是网络问题,是否是刚才的配置信息的内容错误,如果都检查无误,那可能就是主服务器的防火墙问题,关掉防火墙
命令:service iptables stop(如果这个命令不行, 就自行百度换一个)
文章图片
再次show slave status \G这个命令
千万不要在后面跟;
分号,会影响显示效果
文章图片
发现配置成功
四、实测
在主数据库新建一个数据库,和一张user表,添加两条记录
文章图片
文章图片
【MySQL数据库主从复制实现步骤及可能出现问题解决】
文章图片
主数据库添加成功,查看从数据库,数据是否同步
文章图片
文章图片
发现数据已经成功同步,到此MySQL主从复制配置完成,接下来就是在自己的项目中使用了
推荐阅读
- Docker应用:容器间通信与Mariadb数据库主从复制
- 数据库设计与优化
- 数据库总结语句
- py连接mysql
- 2019-01-18Mysql中主机名的问题
- MySql数据库备份与恢复
- mysql|InnoDB数据页结构
- 数据库|SQL行转列方式优化查询性能实践
- mysql中视图事务索引与权限管理
- MYSQL主从同步的实现