千家信息网

Mysql复制Replication的实现方法

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,本篇内容主要讲解"Mysql复制Replication的实现方法",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"Mysql复制Replication的实现方
千家信息网最后更新 2026年11月01日Mysql复制Replication的实现方法

本篇内容主要讲解"Mysql复制Replication的实现方法",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"Mysql复制Replication的实现方法"吧!

Mysql复制(Replication)的实现

个人需要做一个小工程,需要将3台Mysql服务器的数据进行同步操作,经过上网查资料,并进行了实际操作完成了基本构思。

首先准备了3台Centos6.2,搭配了Apache Mysql PHP 等基本Webserver配置

3台机分别是Master A:192.168.1.49 www.2cto.com
Slave B1:192.168.1.50
B2:192.168.1.51

我需要的环境是单向复制,从复制A的数据到B1和B2.令3台机的数据一致。

配置逻辑:

从高层来看,复制分成三步:
(1) master将改变记录到二进制日志(binary log)中(这些记录叫做二进制日志事件,binary log events);
(2) slave将master的binary log events拷贝到它的中继日志(relay log);
(3) slave重做中继日志中的事件,将改变反映它自己的数据。

开始配置: www.2cto.com

第一步:创建复制帐号

每个slave使用标准的MySQL用户名和密码连接master。进行复制操作的用户会授予REPLICATIONSLAVE权限。
用户名的密码都会存储在文本文件master.info中。假如,你想创建repl用户,如下:

1
mysql> GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.*
2
-> TO repl@'192.168.1.%' IDENTIFIED BY '123456';
第二步:配置My.cnf

配置Master的My.cnf,该文件默认位置为/etc/my.cnf

接下来对master进行配置,包括打开二进制日志,指定唯一的servr ID。例如,在配置文件加入如下值:
[mysqld]
log-bin=mysql-bin
server-id=10

重启master,运行SHOW MASTER STATUS,输出如下:



配置Slave的My.cnf,该文件默认位置为/etc/my.cnf

Slave的配置与master类似,你同样需要重启slave的MySQL。如下:

log_bin = mysql-bin
server_id = 2 www.2cto.com
relay_log = mysql-relay-bin
log_slave_updates = 1
read_only = 1
server_id是必须的,而且唯一。slave没有必要开启二进制日志,但是在一些情况下,必须设置,例如,如果slave为其它slave的master,必须设置bin_log。在这里,我们开启了二进制日志,而且显示的命名(默认名称为hostname,但是,如果hostname改变则会出现问题)。
relay_log配置中继日志,log_slave_updates表示slave将复制事件写进自己的二进制日志(后面会看到它的用处)。

有些人开启了slave的二进制日志,却没有设置log_slave_updates,然后查看slave的数据是否改变,这是一种错误的配置。所以,尽量使用read_only,它防止改变数据(除了特殊的线程)。但是,read_only并是很实用,特别是那些需要在slave上创建表的应用。

第三步:启动slave

接下来就是让slave连接master,并开始重做master二进制日志中的事件。你不应该用配置文件进行该操作,而应该使用CHANGE MASTER TO语句,该语句可以完全取代对配置文件的修改,而且它可以为slave指定不同的master,而不需要停止服务器。如下:
1
mysql> CHANGE MASTER TO MASTER_HOST='192.168.1.49',
2
-> MASTER_USER='repl',
3
-> MASTER_PASSWORD='123456',
4
-> MASTER_LOG_FILE='mysql-bin.000001',
5
-> MASTER_LOG_POS=0;
MASTER_LOG_POS的值为0,因为它是日志的开始位置。然后,你可以用SHOW SLAVE STATUS语句查看slave的设置是否正确:

01
mysql> SHOW SLAVE STATUS\G
02
*************************** 1. row ***************************
03 www.2cto.com
Slave_IO_State:
04
Master_Host: server1
05
Master_User: repl
06
Master_Port: 3306
07
Connect_Retry: 60
08
Master_Log_File: mysql-bin.000001
09
Read_Master_Log_Pos: 4
10
Relay_Log_File: mysql-relay-bin.000001
11
Relay_Log_Pos: 4
12
Relay_Master_Log_File: mysql-bin.000001
13
Slave_IO_Running: No
14
Slave_SQL_Running: No
15
...omitted...
16
Seconds_Behind_Master: NULL
Slave_IO_State, Slave_IO_Running, 和Slave_SQL_Running表明slave还没有开始复制过程。日志的位置为4而不是0,这是因为0只是日志文件的开始位置,并不是日志位置。实际上,MySQL知道的第一个事件的位置是4。

为了开始复制,你可以运行:

01
mysql> START SLAVE;
02
mysql> SHOW SLAVE STATUS\G
03
运行SHOW SLAVE STATUS查看输出结果:
04
*************************** 1. row ***************************
05
Slave_IO_State: Waiting for master to send event
06 www.2cto.com
Master_Host: server1
07
Master_User: repl
08
Master_Port: 3306
09
Connect_Retry: 60
10
Master_Log_File: mysql-bin.000001
11
Read_Master_Log_Pos: 164
12
Relay_Log_File: mysql-relay-bin.000001
13
Relay_Log_Pos: 164
14
Relay_Master_Log_File: mysql-bin.000001
15
Slave_IO_Running: Yes
16
Slave_SQL_Running: Yes
17
...omitted...
18
Seconds_Behind_Master: 0
注意,slave的I/O和SQL线程都已经开始运行,而且Seconds_Behind_Master不再是NULL。日志的位置增加了,意味着一些事件被获取并执行了。如果你在master上进行修改,你可以在slave上看到各种日志文件的位置的变化,同样,你也可以看到中数据的变化。

你可查看master和slave上线程的状态。在master上,你可以看到slave的I/O线程创建的连接:

01
> show processlist \G
02
*************************** 1. row ***************************
03
Id: 1
04
User: root
05
Host: localhost:2096
06
db: test www.2cto.com
07
Command: Query
08
Time: 0
09
State: NULL
10
Info: show processlist
11
*************************** 2. row ***************************
12
Id: 2
13
User: repl
14
Host: localhost:2144
15
db: NULL
16
Command: Binlog Dump
17
Time: 1838 www.2cto.com
18
State: Has sent all binlog to slave; waiting for binlog to be updated
19
Info: NULL
20
2 rows in set (0.00 sec)
基本到这里就完成,至于后期的加强操作,我会在另行添加。

测试过程要主要的问题:
1.请先配置好Mysql
2.开通复制前请将Mysql的库和表的框架复制过去。(再测试一下能不能连表都复制过去!)

到此,相信大家对"Mysql复制Replication的实现方法"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

日志 配置 位置 二进制 文件 数据 事件 方法 用户 运行 实际 线程 语句 中继 实用 接下来 内容 密码 服务器 用户名 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 高科技与互联网 未来的互联网科技 沃里互联网科技 上游互联网科技 苏州大垚互联网科技 科技互联网创业计划书 滨湖区互联网智能科技产品供应 深圳市运趣互联网科技有限公司 互联网科技有哪些公司 互联网金融中的现代科技 玉溪互联网科技怎么选 呼和浩特新华互联网科技学院 佛山市拉法互联网科技有限公司 互联网科技快讯热点 图游互联网科技 江苏互联网科技小贷 山东大美朱楼互联网科技有限公司 绵阳真晨互联网科技有限公司 互联网科技大会大佬 互联网科技创业计划的风险分析 中国互联网科技股 掌上梦互联网科技 居家互联网科技有限公司 丰台科技园 互联网公司 银川新华互联网科技职业技术培训学校图片 青岛科技大学互联网大赛研究生 移动互联网科技公司 城市宝互联网科技有限公司 张家口科技产业互联网平台 科技和互联网行业的特点
0