0

0

MySQL 复制 on Ubuntu12.04

php中文网

php中文网

发布时间:2016-06-07 16:44:28

|

1136人浏览过

|

来源于php中文网

原创

MySQL 复制(Replication)基于binnary logging机制,将数据在master和slave之间同步。无论机制、配置、运行维护都比MSSQL2000的

一、简介

MySQL 复制(Replication)基于binnary logging机制,,将数据在master和slave之间同步。无论机制、配置、运行维护都比MSSQL2000的复制简单稳定很多(mssql2000之后的版本没用过)。

Mysql master将数据更新、变化作为事件写入binary log,Mysql slave读取binary log的事件并将相同的更新、变化写入自己的数据库。

Master只管自己写binary log,不用照看slave。Slave只要在线,数据即可持续同步;即使slave离线,恢复在线后可以继续执行未完成的复制。这一点非常适合进行数据备份,因为在slave上备份丝毫不影响master的运行。

Master可以有多个slaves,slave也可以同时作为master并且拥有自己的slaves。

每一个master和slave必须在my.cnf中指定唯一的 server-id。

在slave上,复制可以随时使用简单的指令停止、恢复。

binary log有三种格式:STATEMENT,ROW,MIXED。STATEMENT格式基于SQL语句,性能高但不支持某些SQL语句;ROW格式基于行,能克服STATEMENT格式的缺点但会产生较大的日志;MIXED结合二者特点,默认使用STATEMENT,当STATEMENT格式不适用时自动转为ROW格式。推荐MIXED可以在Master的my.cnf中设定此参数。

二、设置Mysql复制非常简单,场景如下。

OS:Ubuntu12.04 X86_64

Master:主机名 mysql-0,IP 192.168.150.200

Slave: 主机名 mysql-1,IP 192.168.150.204

1、在Master上:

编辑文件/etc/mysql/my.cnf 确保有如下几行(后3行是InnoDB引擎必须的,建议加上)
[mysqld]

bind-address=0.0.0.0
server-id=1
log-bin=mysql-binary-log   #这个名字自己随便起
binlog_format=MIXED
innodb_fast_shutdown=0
innodb_flush_log_at_trx_commit=1
sync_binlog=1

然后重启Master的mysql server。

创建一个用户

mysql> create user 'repl'@'192.168.150.200' identified by 'pass4repl';
mysql> grant replication slave on *.* to 'repl'@'192.168.150.200';

为slave获得binary log坐标,首先要使数据库暂时只读,执行:
mysql> FLUSH TABLES WITH READ LOCK;

此终端窗口不动,另外打开一个终端窗口连接到mysql server,执行:
mysql> SHOW MASTER STATUS;
+-------------------------+----------+--------------+------------------+
| File                    | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------------+----------+--------------+------------------+
| mysql-binary-log.000001 |      106 |              |                  |
+-------------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

记下来这两个值mysql-binary-log.000001、106,一会儿设置slave时要用到,注意,这是我的测试结果,你的结果很可能不同。(Binlog_Do_DB 和 Binlog_Ignore_DB也许能决定哪些库复制哪些库不复制,这个以后研究

如果Master上已经有了数据,则需要先用mysqldump或者原始数据拷贝生成现有数据的”快照“,应用到Slave服务器上,再配置Slave。

一般用mysqldump做备份,再拷贝到slave上恢复就能满足大部分需求。特殊情况稍微复杂些,可以参考官方链接:
16.1.1.5 Creating a Data Snapshot Using mysqldump
16.1.1.6 Creating a Data Snapshot Using Raw Data Files

如果Master上没有用户数据,或者已经把数据快照应用到Slave上,就可以在刚才执行”FLUSH TABLES WITH READ LOCK;“的终端窗口里执行
mysql> UNLOCK TABLES;

以解锁Master数据库,然后继续配置Slave。(或者退出该终端窗口也可)

2、在Slave上:

编辑文件/etc/mysql/my.cnf 确保有如下2行
[mysqld]

report-host=192.168.150.200
server-id=2

重启一下slave的mysql server。

然后在mysql中执行:
mysql> CHANGE MASTER TO
    -> MASTER_HOST='192.168.150.200',
    -> MASTER_USER='repl',
    -> MASTER_PASSWORD='pass4repl',
    -> MASTER_LOG_FILE='mysql-binary-log.000001',
    -> MASTER_LOG_POS=106;

大功告成! 

3、简单的管理任务(结果数据来自官方文档)

在Master上

mysql> SHOW PROCESSLIST \G;
*************************** 4. row ***************************
    Id: 10
  User: root
  Host: slave1:58371
    db: NULL
Command: Binlog Dump
  Time: 777
  State: Has sent all binlog to slave; waiting for binlog to be updated
  Info: NULL

mysql> SHOW SLAVE HOSTS;
+-----------+--------+------+-------------------+-----------+
| Server_id | Host  | Port | Rpl_recovery_rank | Master_id |
+-----------+--------+------+-------------------+-----------+
|        10 | slave1 | 3306 |                0 |        1 |
+-----------+--------+------+-------------------+-----------+
1 row in set (0.00 sec)

在slave上

mysql> SHOW SLAVE STATUS \G
mysql> STOP SLAVE;
mysql> START SLAVE; 

参考: Mysql的官方文档写得真心不错,清晰易懂。

禁用Mysql复制:
1、在Slave上停止复制,执行:
mysql> STOP SLAVE;

2、在Master上,编辑 /etc/mysql/my.cnf,注释掉如下几行:
report-host=192.168.150.200
server-id=2

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
C++ 设计模式与软件架构
C++ 设计模式与软件架构

本专题深入讲解 C++ 中的常见设计模式与架构优化,包括单例模式、工厂模式、观察者模式、策略模式、命令模式等,结合实际案例展示如何在 C++ 项目中应用这些模式提升代码可维护性与扩展性。通过案例分析,帮助开发者掌握 如何运用设计模式构建高质量的软件架构,提升系统的灵活性与可扩展性。

14

2026.01.30

c++ 字符串格式化
c++ 字符串格式化

本专题整合了c++字符串格式化用法、输出技巧、实践等等内容,阅读专题下面的文章了解更多详细内容。

9

2026.01.30

java 字符串格式化
java 字符串格式化

本专题整合了java如何进行字符串格式化相关教程、使用解析、方法详解等等内容。阅读专题下面的文章了解更多详细教程。

12

2026.01.30

python 字符串格式化
python 字符串格式化

本专题整合了python字符串格式化教程、实践、方法、进阶等等相关内容,阅读专题下面的文章了解更多详细操作。

4

2026.01.30

java入门学习合集
java入门学习合集

本专题整合了java入门学习指南、初学者项目实战、入门到精通等等内容,阅读专题下面的文章了解更多详细学习方法。

20

2026.01.29

java配置环境变量教程合集
java配置环境变量教程合集

本专题整合了java配置环境变量设置、步骤、安装jdk、避免冲突等等相关内容,阅读专题下面的文章了解更多详细操作。

18

2026.01.29

java成品学习网站推荐大全
java成品学习网站推荐大全

本专题整合了java成品网站、在线成品网站源码、源码入口等等相关内容,阅读专题下面的文章了解更多详细推荐内容。

19

2026.01.29

Java字符串处理使用教程合集
Java字符串处理使用教程合集

本专题整合了Java字符串截取、处理、使用、实战等等教程内容,阅读专题下面的文章了解详细操作教程。

3

2026.01.29

Java空对象相关教程合集
Java空对象相关教程合集

本专题整合了Java空对象相关教程,阅读专题下面的文章了解更多详细内容。

6

2026.01.29

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
国外Web开发全栈课程全集
国外Web开发全栈课程全集

共12课时 | 1.0万人学习

PHP自制框架
PHP自制框架

共8课时 | 0.6万人学习

简单聊聊mysql8与网络通信
简单聊聊mysql8与网络通信

共1课时 | 815人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号