苟哥的笔记本
首页
文章归档
关于
文章归档
关于
首页
编程
正文
配置MySQL主从复制
苟哥
2019-08-12 AM
1208℃
0条
#### MySQL主从复制原理 MySQL 的主从复制并不是数据库磁盘上的文件直接拷贝,也不是直接使用某个编程语言脚本将主服务器数据取出,然后写入到从服务器。 主服务器数据库的每次操作都会记录在二进制日志文件*mysql-bin.xxx(保存文件位置可自行配置)* 中。从服务器的I/O线程使用专用帐号登陆到主服务器中读取该二进制文件,并将文件内容写入到自己本地的中继日志relay-log文件中。然后从服务器的SQL线程会根据中继日志中的内容执行SQL语句。 ![55-01.png](http://images.kuryun.com/blog/typecho/55-01.png) ------ #### 准备工作 - 作为操作演示,我直接用VM安装了两台Centos7虚拟主机(在此多一下嘴,大家应该学会使用最廉价、方便的方式去学习和实践,因为VM可以让你肆意捣鼓),为了提高工作效率,我在主机windows上使用Xshell连接两个虚拟机(具体如何连接的,请阅读上一篇文章《在window7主机上连接虚拟机上的Centos系统》)。 - 关闭两台虚拟机的防火墙: ```shell systemctl stop firewalld ``` - 主库 192.168.232.129:3306、从库 192.168.232.128:3306。其中,主库上比从库上多了一个test数据库,因此,此次演示将使用test作为操作对象。 - 在MySQL主从复制开始工作之前,我们需要让主从库的数据库(test)达到相同状态。因此需要依次做如下操作: 备份主库的test ```shell mysql -uroot -puse test; flush tables with read lock; #将test数据库的表锁上,防止在配置期间有新的改动 mysqldump -uroot -p test > /root/Desktop/test.sql #导出位置自行设置 unlock tables; #备份完成后解锁数据库表 ``` - 导入从库 ```shell mysql -uroot -pcreate database test; use test; source /root/test.sql #从主库导出的备份文件 ``` ------ #### 配置主数据库 - 建立用于同步的账号 rep,这个账号是用于代替从库访问主库相关权限的角色,你可以简单地理解为快递员: ```shell grant replication slave on *.* to 'rep'@'192.168.232.129' identified by '123456'; flush privileges; ``` - 编辑配置文件my.cnf,在[mysqld]配置段里增加以下几行: ```shell server-id = 1 #值为1~2^32-1 区间内 log-bin=mysql-bin #操作记录存储的二进制日志文件 log-err=log-err #错误日志文件 binlog_format=STATEMENT binlog-ignore-db=mysql #忽略主库对mysql数据库的操作 binlog-do-db=test #只复制test数据;若要复制全部,则去掉此行;若要新增数据库,则复制此行,写上对应的数据库名称即可 ``` ![55-02.png](http://images.kuryun.com/blog/typecho/55-02.png) - 检查效果: ```shell show master status; ``` ![55-04.png](http://images.kuryun.com/blog/typecho/55-04.png) ------ #### 配置从数据库 - 编辑配置文件my.cnf,在[mysqld]配置段里增加以下几行: ```shell server-id = 2 #值为1~2^32-1 区间内,但一定不能和主库的值相 relay-log = mysql-relay #将主服务器的二进制日志读取过来记录到此处,也可使用默认设置 ``` ![55-03.png](http://images.kuryun.com/blog/typecho/55-03.png) 重启mysql服务: ```shell service mysql restart ``` - 修改从库的master info: ```shell change master to MASTER_HOST='192.168.232.129', #主库的host MASTER_PORT=3306, #主库的port MASTER_USER='rep', #在主库创建的那个“快递员” MASTER_PASSWORD='123456', MASTER_LOG_FILE='mysql-bin.000019', #主库show master status中显示的 MASTER_LOG_POS=154; #主库show master status中显示的 ``` cat /path/data/master.info 可以看到以下信息: ![55-05.png](http://images.kuryun.com/blog/typecho/55-05.png) - 启动slave: ```shell start slave; ``` ![55-06.png](http://images.kuryun.com/blog/typecho/55-06.png) - 查看slave状态: ```shell show slave status; ``` 得到如下结果: ![mysql-7.png](http://images.kuryun.com/blog/typecho/mysql-7.png) 说明配置成功了。 ------ #### 测试主从同步 尝试在主库对test进行增、删、改、查等操作,通过对主库的 ```shell show master status\G ``` 和从库的 ```shell show slave status\G ``` 可以发现,从库的Read_Master_Log_Pos 会随着主库的Position 变化而变化(或者直接进行数据库表的数据对比),说明了从库已经和主库进行了同步操作。 ------ #### 扩展 如果想让主从的所有库表都进行同步,那么可以将主库的配置去掉以下两项: ```shell binlog-ignore-db=mysql #忽略主库对mysql数据库的操作 binlog-do-db=test #只复制test数据 ```
标签:
mysql
,
MySQL主从复制
非特殊说明,本博所有文章均为博主原创。
如若转载,请注明出处:
http://www.i366211.com/archives/55/
上一篇
正确看待递归函数
下一篇
(一)项目的初始化 | 使用Vue搭建微信开发的脚手架
取消回复
评论啦~
提交评论
栏目分类
软件安装
10
开发工具
8
算法
2
测试
1
架构
3
填坑记
2
开源
6
科普
6
私域
2
读书笔记
4
编程
48
运营
3
管理
1
标签云
算法
C程序设计语言
C语言
Java
mysql
PHP
ffmpeg
golang
VueJs
脚手架
VueJs实战项目
Intellij IDEA
Centos7
Hyperf
抖音运营
杰克韦尔奇
跌荡一百年
生成海量测试数据
企业管理
习题2-3
习题2-4
习题2-6
异常分类
File
习题2-7
习题2-8
习题2-9
习题3-3
习题3-4
习题3-5
友情链接
申请
SaaS引擎
机器人框架
京东捡漏