MySQL运维篇2——主从复制
本文最后更新于 504 天前,如有失效请评论区留言。

主从复制概述

主从复制是指将主数据库的DDL和DML操作通过二进制日志传到从库服务器中,然后在从库上对这些日志重新执行(也叫重做),从而使得从库和主库的数据保持同步。

MySQL支持一台主库同时向多台从库进行复制,从库同时也可以作为其他从服务器的主库,实现链状复制。

image-20240814153817077

MySQL复制的有点主要包含以下三个方面:

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

主从复制原理

MySQL的主从复制原理如下:

image-20240814154311170

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

主从复制搭建

服务器准备

  • 在两台服务器中安装好MySQL,并完成基础的初始化准备工作。
master:192.168.200.210
slave :192.168.200.211

master配置

1、修改my.cnf

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

2、登录MySQL,创建远程连接的账号,并授予主从复制权限。

#创建itcast用户,并设置密码,该用户可在任意主机连接该MySQL服务
mysql> create user 'repl'@'%' identified  by 'Root@1234567!';

#为 repl@'%' 用户分配主从复制权限
mysql> grant replication slave on *.* to repl@'%';
mysql> flush privileges;

3、查看二进制日志坐标。

-- MySQL8.0
mysql> show master status;

-- MySQL8.4
mysql> show binary log status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 |      158 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
  • file:从哪个日志文件开始推送日志文件
  • position:从哪个位置开始推送日志
  • binlog_ignore_db:指定不需要同步的数据库

slave配置

1、修改my.cnf,并重启数据库

vim my.cnf
[mysqld]
server-id=2  #需要跟master不一致
read-only=1 #只读,但对具有super权限的超级管理员不生效,1为只读,0为读写。
#super-read-only=1 #超级管理员只读
  • 在双主双从架构中,read-only 需要设置为0。

2、在slave中配置master信息,连接master。

CHANGE REPLICATION SOURCE TO SOURCE_HOST='192.168.200.210',
SOURCE_PORT=3306,
SOURCE_USER='repl',
SOURCE_PASSWORD='Root@1234567!',
SOURCE_LOG_FILE='mysql-bin.000001',
SOURCE_LOG_POS=158;
  • 注意,MySQL8.0.23以后的版本主从复制的命令有所变化(也兼容下面的命令),如果是这个版本之前,或者是MySQL5版本,请使用:
CHANGE MASTER TO MASTER_HOST='XX',MASTER_USER='XX',MASTER_PASSWORD='XX',MASTER_LOG_FILE='XX',MASTER_LOG_POS=XXX;

image-20240814172643252

3、启动主从复制

-- 8.0.22 之后
mysql> start replica;

-- 8.0.22 之前
mysql> start slave;

4、查看主从复制的启动状态

mysql> show replica status\G

image-20240814173320511

到此,数据库主从复制搭建完成。

测试

首先在主库创建一个表,并插入数据。

create table tb1(id int,name varchar(10),age int);
insert into tb1 values(1,'Tom',13),(2,'sam',11);

在从库进行查询,从库已经正常创建了表并写入了数据。

mysql> select * from tb1;
+------+------+------+
| id   | name | age  |
+------+------+------+
|    1 | Tom  |   13 |
|    2 | sam  |   11 |
+------+------+------+

---END

版权声明:除特殊说明,博客文章均为cuckooyang原创,依据CC BY-SA 4.0许可证进行授权,转载请附上出处链接及本声明。 | 博客订阅:RSS | 广告招租:留言板 | 博客VPS |
暂无评论

发送评论 编辑评论


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