mysql主从复制的实现步骤


Posted in MySQL onOctober 24, 2021

mysql主从复制

本来是在做sharding的,可是做好之后发现数据库的主从复制还没有做,所以在配置好了之后做了些记录:

mysql主从复制的方式

mysql主从复制有两种方式:基于日志(binlog)、基于GTID(全局事物标示符)本博文用的是基于日志(binlog)的复制。

mysql主从复制的原理

1、 Master将数据记录到二进制日志中,也就是mysql配置文件my.cnf的log-bin指定的文件,这些记录叫做二进制日志事件。
2、 Slave有两个线程,一个I/O线程,一个SQL线程。I/O线程请求Master,将得到的binlog日志写到relay log(中继日志) 文件中。
3、 SQL 线程,会读取relay log文件中的日志,并解析成具体操作,来实现主从的操作一致,而最终数据一致。

mysql主从复制的实现步骤

mysql的主从配置的具体实现方式

1、 Master配置

(1) 修改mysql的my.cnf配置文件,这里比较坑爹的是我用的mysql版本没有my.cnf 配置文件,连my-default.cnf都没有,一般来说my.cnf在/etc目录下, my-default.cnf在/usr/local/mysql/support-files中。最终我在网上复制了一份my.cnf文件放在了/etc中(朋友们可以自己去网上找,有很多的)。
(2) my.cnf中需要修改的配置主要有开启日志功能,设置server_id保证其唯一性(不能跟从库一样),过滤需备份的数据库。

bash-3.2# vim /etc/my.cnf
# 设置server_id,不能重复,一般可以设置为主库的IP
server_id=81
# 备份过滤:需要备份的数据库,输出binlog
binlog-do-db=demo_ds_master
# 备份过滤:不需要备份的数据库,不输出
binlog-ignore-db=mysql
# 开启二进制日志,将主库数据记录到mysql-bin开头的日志文件中(可自定义)          
log-bin=mysql-bin
# 配置每个session的内存,在事物过程中用来存储二进制日志的缓存
binlog_cache_size=1M
# 主从复制的格式(mixed,statement,row 默认的是statement)
binlog_format=mixed
# 二进制日志自动删除/过期的天数,默认为0,不自动删除
expire_logs_days=7
# 用于跳过主从复制中遇到的所有错误或指定的错误类型,避免slave端的终端
# 1062:主键冲突(具体的参数可以去网上查询)
slave_skip_errors=1062

(3) 启动/重启Master数据库服务,登录数据库,创建数据同步用户,并授权

#授权这个机器可以备份主数据库的数据
mysql> GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'root'@'192.168.31.60' identified by 'password';
#然后刷新权限
mysql> flush privileges;
#查看配置的主库信息
mysql> show master status;

mysql主从复制的实现步骤 

(4) 主库数据备份,确保主从库的数据一致性

# 临时锁住表,设置只读权限
mysql> flush tables with read lock;
# 备份数据库
bash-3.2# mysqldump -uroot -p --add-drop-table demo_ds_master_1 > /tmp/demo_ds_master_1.sql;
# 解锁表
mysql> unlock table;

2、 Slave配置

(1) 修改从数据库mysql的my.cnf配置文件,添加从数据库的中继日志配置

[root@develop etc]# vim my.cnf
# 设置server_id,不能重复,这里设置的是从库的IP
server-id=60
# 开启从数据库中继日志,将主数据库的binlog写到relay log中,中继日志以hehe-mysql-relay-bin开头(可自定义)
relay_log=hehe-mysql-relay-bin
# 设置从数据库为只读权限,防止主从数据不一致
read_only=1

(2) 如果从库需要作为另一个库的主库的话,需要加上Master上的配置信息,并且加上log_slave_updates=1将Master的binlog记录到自己的binlog日志中。

mysql主从复制的实现步骤 

(3) 重启从库数据库,同步主库数据

# 运行主数据库的备份数据库
[root@develop etc]# mysql -uroot -p demo_ds_master_1 < /tmp/demo_ds_master_1.sql
# 登录从数据库
[root@develop etc]# mysql -uroot -p
# 设置该从节点的主节点
mysql> change master to master_host='192.168.31.80', master_user='root',master_password='password',
master_port=3306,
master_log_file='mysql-bin.000001',
master_log_pos=154;
# 开启主从同步
mysql> start slave;
# 查看主从同步状态
mysql> show slave status\G;
# 查看主从线程状态
mysql> show processlist\G;

mysql主从复制的实现步骤 

图片中显示如下,说明主从复制已经配置好了,下面主库插入数据就可以实现从库自动复制主库数据了。

  • Slave_IO_State: Waiting for master to send event
  • Slave_IO_Running: Yes
  • Slave_SQL_Running: Yes

到此这篇关于mysql主从复制的实现步骤的文章就介绍到这了,更多相关mysql主从复制内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

MySQL 相关文章推荐
MySQL 隔离数据列和前缀索引的使用总结
May 14 MySQL
Mysql数据库按时间点恢复实战记录
Jun 30 MySQL
为什么MySQL分页用limit会越来越慢
Jul 25 MySQL
MySQL非空约束(not null)案例讲解
Aug 23 MySQL
MySQL中int (10) 和 int (11) 的区别
Jan 22 MySQL
MySQL数据库完全卸载的方法
Mar 03 MySQL
MySQL中rank() over、dense_rank() over、row_number() over用法介绍
Mar 23 MySQL
MySQL Server 层四个日志
Mar 31 MySQL
MySQL实现配置主从复制项目实践
Mar 31 MySQL
MySQL聚簇索引和非聚簇索引的区别详情
Jun 14 MySQL
MySQL存储过程及语法详解
Aug 05 MySQL
MySQL新手入门进阶语句汇总
Sep 23 MySQL
记一次Mysql不走日期字段索引的原因小结
Oct 24 #MySQL
Mysql关于数据库是否应该使用外键约束详解说明
Oct 24 #MySQL
MySQL七种JOIN类型小结
MySQL中的引号和反引号的区别与用法详解
SQL实战演练之网上商城数据库商品类别数据操作
Oct 24 #MySQL
为什么MySQL 删除表数据 磁盘空间还一直被占用
mysql中int(3)和int(10)的数值范围是否相同
You might like
全国FM电台频率大全 - 12 安徽省
2020/03/11 无线电
php桌面中心(一) 创建数据库
2007/03/11 PHP
php 图片加水印与上传图片加水印php类
2010/05/12 PHP
判断php数组是否为索引数组的实现方法
2013/06/13 PHP
PHP中的浅复制与深复制的实例详解
2017/10/26 PHP
微信公众平台开发教程④ ThinkPHP框架下微信支付功能图文详解
2019/04/10 PHP
解决thinkphp5未定义变量会抛出异常,页面错误,请稍后再试的问题
2019/10/16 PHP
浅谈PHP之ThinkPHP框架使用详解
2020/07/21 PHP
用JS实现一个页面多个css样式实现
2008/05/29 Javascript
Javascript面向对象之四 继承
2011/02/08 Javascript
20个最新的jQuery插件
2012/01/13 Javascript
使用js复制链接中的部分文字的方法
2015/07/30 Javascript
JQuery EasyUI的使用
2016/02/24 Javascript
Jquery遍历select option和添加移除option的实现方法
2016/08/26 Javascript
jQuery中fadein与fadeout方法用法示例
2016/09/16 Javascript
纯js三维数组实现三级联动效果
2017/02/07 Javascript
Angular2 父子组件数据通信实例
2017/06/22 Javascript
Vue-Router进阶之滚动行为详解
2017/09/13 Javascript
layui实现动态和静态分页
2018/04/28 Javascript
浅谈Webpack打包优化技巧
2018/06/12 Javascript
js getBoundingClientRect使用方法详解
2019/07/17 Javascript
微信小程序开发中var that =this的用法详解
2020/01/18 Javascript
Ant Design的可编辑Tree的实现操作
2020/10/31 Javascript
基于vue+echarts数据可视化大屏展示的实现
2020/12/25 Vue.js
vue实现轮播图帧率播放
2021/01/26 Vue.js
[02:16]卖萌的僵尸 DOTA2神话信使飞僵小宝来袭
2014/03/24 DOTA
python脚本实现数据导出excel格式的简单方法(推荐)
2016/12/30 Python
Python实现简易Web爬虫详解
2018/01/03 Python
Python两个字典键同值相加的几种方法
2019/03/05 Python
Python实现异步IO的示例
2020/11/05 Python
美国汽配连锁巨头Pep Boys官网:轮胎更换、汽车维修服务和汽车零部件
2017/01/14 全球购物
西北政法大学自主招生自荐信
2014/01/29 职场文书
党的群众路线教育实践活动查摆问题自查报告
2014/10/10 职场文书
MySQL为id选择合适的数据类型
2021/06/07 MySQL
室外天线与收音机天线杆接合方法
2022/04/05 无线电
python语言中pandas字符串分割str.split()函数
2022/08/05 Python