002、MySQL主从复制
本文最后更新于 66 天前,其中的信息可能已经过时,如有错误请发送邮件到wuxianglongblog@163.com

MySQL主从复制

一、概述

主从复制是将主数据库(master)的DDL和DML操作通过二进制日志传到从库(slave)服务器中,然后在从库上将这些日志重新执行(重做),
从而使得从库和主库数据保持同步。
MySQL支持一台主库同时向多台仓库进行复制,从库同时也可以作为其他服务器的主库,实现链状复制

MySQL主从复制的优点:

  • 1.主库出现问题,可以快速切换到从库提供服务;
  • 2.实现读写分离,降低主库的访问压力;
  • 3.可以在从库中执行备份,以避免备份期间影响主库服务。

二、原理

主从复制分为三步;

  • 1.Master主库在事务提交时,会把数据变更记录在二进制日志文件Binlog中;
  • 2.从库读取主库的二进制文件Binlog,写入到从库的中继日志Relaylog中;
  • 3.slave重做中继日志中的事件,将改变反映自己的数据。

主从复制原理

三、搭建

3.1 服务器准备

  • 第一步:准备两台服务器,一台做主库,一台做从库;
  • 第二步:开放两台服务器指定的3306端口;
#开放指定3306端口
firewall-cmd --zone=public --add-port=3306/tcp -permanent
firewall-cmd-reload

#关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
  • 第三步:两台服务器分别安装好MySQL,并完成基础初始化准备工作。

3.2 主库(Master)配置

第一步:修改配置文件/etc/my.cnf

#mysql服务ID,保证整个集群环境中唯一,取值范围:1-(2^32-1),默认为1
server-id=1
#是否只读,1--只读,0--读写
read-only=0
#忽略的数据,指不需要同步的数据库
binlog-ignore-db=mysql
#指定同步的数据库
binlog-do-db=数据库名

第二步:重启MySQL服务器
第三步:登录MySQL,创建远程连接账号,并授予主从复制权限

#创建itcast用户,设置密码,该用户可以在任意主句连接MySQL服务
create user 'itcast'@'%' identified with mysql_native_password by 'Root@123456';
#为‘itcast'@'%'用户分配主从复制权限
grant replication slave on *.* to 'itcast'@'%';

第四步:通过指令查看二进制日志坐标

show master status;
+---------------+----------+--------------+------------------+-------------------+
| File          | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------+----------+--------------+------------------+-------------------+
| binlog.000001 |      663 |              |                  |                   |
+---------------+----------+--------------+------------------+-------------------+
#字段说明:
file:从哪个日志文件开始推送日志文件
position:从哪个文件开始推送日志
binlog_ignore_db:指定不需要同步的数据库

3.3 从库(Slave)配置

第一步:修改配置文件/etc/my.cnf

#mysql服务ID,保证整个集群环境中唯一,取值范围:1-(2^32-1),和主库不同即可
server-id=2
#是否只读,1--只读,0--读写
read-only=1 --普通用户只读,超级管理员可读写
#super-read-only=1 --超级管理员可读

第二步:重启MySQL服务器
第三步:登录MySQL,设置主库配置

#MySQL8.0.23版本:
change replication source to source_host='主库ip地址', source_user='主库用户名',source_password='主库密码',source_log_file='二进制文件名',source_log_pos=二进制文件位置;
#MySQL8.0.23之前版本执行:
change master to master_host='',master_user='',master_password='',master_log_file='',master_log_pos=xxx;

第四步:启动同步操作

#8.0.22之后
start replica;
#8.0.22之前
start slave;

第五步:查看主从同步状态

#8.0.22之后
show replica status\G;
#出现提示:
#Replica_IO_Running: Yes 
--出现No,检查/var/lib/mysql/auto.cnf 检查uuid是否重复
#Replica_SQL_Running: Yes 
--出现No,可能是主从没开启前就在主库上进行操作,导致数据同步出错,或者重启造成数据回滚,解决方法:
1.关闭从库:stop slave;
2.跳过slave上的一个错误:set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
3.启动start slave;
#8.0.22之前
show slave status\G;
谨此笔记,记录过往。凭君阅览,如能收益,莫大奢望。
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇