首页 数据库 mysql教程 MySQL 数据库双主改造

MySQL 数据库双主改造

Jun 07, 2016 pm 03:46 PM
mysql 使用 改造 数据库

对于使用中的已有了一些数据库的 MySQL, 如何改造成双主呢? 这里写一篇文章, 详细记录操作步骤. 听取各位的意见. 这里假设有两台服务器: A 和 B. 要让他们互为主, 但实际使用时, 不同的服务器只服务不同的 db, 避免出现数据冲突. 1. 修改 nginx 配置, 挂维护

对于使用中的已有了一些数据库的 MySQL, 如何改造成双主呢? 这里写一篇文章, 详细记录操作步骤. 听取各位的意见.

这里假设有两台服务器: A 和 B. 要让他们互为主, 但实际使用时, 不同的服务器只服务不同的 db, 避免出现数据冲突.

1. 修改 nginx 配置, 挂维护页

这一步很重要. 你需要告诉你的用户, 你的网站在维护, 同时要确保不会再出现数据库写操作.

另外, 还要停止 crontab 任务.

2. 备份数据库

Server A:

<span>mysqldump </span><span>-</span><span>uroot </span><span>-</span><span>p </span><span>--</span><span>all</span><span>-</span><span>databases </span><span>></span><span> a_dbdump_all</span><span>.</span><span>sql
gzip a_dbdump_all</span><span>.</span><span>sql</span>
登录后复制

Server B:

<span>mysqldump </span><span>-</span><span>uroot </span><span>-</span><span>p </span><span>--</span><span>all</span><span>-</span><span>databases </span><span>></span><span> b_dbdump_all</span><span>.</span><span>sql
gzip b_dbdump_all</span><span>.</span><span>sql</span>
登录后复制

把线上数据库备份到本地

<span>scp test@server_a</span><span>:~/</span><span>a_dbdump_all</span><span>.</span><span>sql</span><span>.</span><span>gz </span><span>.</span><span>
scp test@server_b</span><span>:~/</span><span>b_dbdump_all</span><span>.</span><span>sql</span><span>.</span><span>gz </span><span>.</span>
登录后复制

3. 新建数据库同步账号

Server A:

<span>GRANT REPLICATION SLAVE ON </span><span>*.*</span><span> TO </span><span>'userx'</span><span>@</span><span>'server_b'</span><span> IDENTIFIED BY </span><span>'xxxxx'</span><span>;</span>
登录后复制

Server B:

<span>GRANT REPLICATION SLAVE ON </span><span>*.*</span><span> TO </span><span>'userx'</span><span>@</span><span>'server_a'</span><span> IDENTIFIED BY </span><span>'xxxxx'</span><span>;</span>
登录后复制

4. 导数据

这一步是手工将两台服务器数据库(基准数据)同步.

Server A:

<span>mysqldump </span><span>-</span><span>uroot </span><span>-</span><span>p </span><span>--</span><span>databases db1 </span><span>></span><span> a_dbdump</span><span>.</span><span>sql
scp a_dbdump</span><span>.</span><span>sql test@server_b</span><span>:~</span>
登录后复制

Server B:

<span>mysqldump </span><span>-</span><span>uroot </span><span>-</span><span>p </span><span>--</span><span>databases db2 </span><span>></span><span> b_dbdump</span><span>.</span><span>sql
scp b_dbdump</span><span>.</span><span>sql test@server_a</span><span>:~</span>
登录后复制

Server A:

<span>source b_dbdump</span><span>.</span><span>sql</span>
登录后复制

Server B:

<span>source a_dbdump</span><span>.</span><span>sql</span>
登录后复制

5. 修改 mysql 配置

Server A:

<span>[</span><span>mysqld</span><span>]</span><span>
server</span><span>-</span><span>id</span><span>=</span><span>1</span><span>
log</span><span>-</span><span>bin</span><span>=</span><span>mysql</span><span>-</span><span>bin
log</span><span>-</span><span>slave</span><span>-</span><span>updates
binlog</span><span>-</span><span>ignore</span><span>-</span><span>db</span><span>=</span><span>mysql
binlog</span><span>-</span><span>ignore</span><span>-</span><span>db</span><span>=</span><span>test
binlog</span><span>-</span><span>ignore</span><span>-</span><span>db</span><span>=</span><span>information_schema
binlog</span><span>-</span><span>ignore</span><span>-</span><span>db</span><span>=</span><span>performance_schema
replicate</span><span>-</span><span>ignore</span><span>-</span><span>db</span><span>=</span><span>mysql
replicate</span><span>-</span><span>ignore</span><span>-</span><span>db</span><span>=</span><span>test
replicate</span><span>-</span><span>ignore</span><span>-</span><span>db</span><span>=</span><span>information_schema
replicate</span><span>-</span><span>ignore</span><span>-</span><span>db</span><span>=</span><span>performance_schema
master</span><span>-</span><span>connect</span><span>-</span><span>retry</span><span>=</span><span>10</span><span>Server</span><span> B</span><span>:</span><span>[</span><span>mysqld</span><span>]</span><span>
server</span><span>-</span><span>id</span><span>=</span><span>2</span><span>
log</span><span>-</span><span>bin</span><span>=</span><span>mysql</span><span>-</span><span>bin
log</span><span>-</span><span>slave</span><span>-</span><span>updates
binlog</span><span>-</span><span>ignore</span><span>-</span><span>db</span><span>=</span><span>mysql
binlog</span><span>-</span><span>ignore</span><span>-</span><span>db</span><span>=</span><span>test
binlog</span><span>-</span><span>ignore</span><span>-</span><span>db</span><span>=</span><span>information_schema
binlog</span><span>-</span><span>ignore</span><span>-</span><span>db</span><span>=</span><span>performance_schema
replicate</span><span>-</span><span>ignore</span><span>-</span><span>db</span><span>=</span><span>mysql
replicate</span><span>-</span><span>ignore</span><span>-</span><span>db</span><span>=</span><span>test
replicate</span><span>-</span><span>ignore</span><span>-</span><span>db</span><span>=</span><span>information_schema
replicate</span><span>-</span><span>ignore</span><span>-</span><span>db</span><span>=</span><span>performance_schema
master</span><span>-</span><span>connect</span><span>-</span><span>retry</span><span>=</span><span>10</span>
登录后复制

注意, 他们的 server-id 不相同.

6. 重启 MySQL, 测试同步账号可用

重启 MySQL.

Server A:

<span>mysql </span><span>-</span><span>hserver_b </span><span>-</span><span>uuserx </span><span>-</span><span>pxxxxx</span>
登录后复制

Server B:

<span>mysql </span><span>-</span><span>hserver_a </span><span>-</span><span>uuserx </span><span>-</span><span>pxxxxx</span>
登录后复制

7. 启动 Slave 线程

Server A:

<span>FLUSH TABLES</span><span>;</span><span>
show master status</span><span>;</span>
登录后复制

会显示这样的信息.

<span>***************************</span><span>1.</span><span> row </span><span>***************************</span><span>File</span><span>:</span><span> mysql</span><span>-</span><span>bin</span><span>.</span><span>000001</span><span>Position</span><span>:</span><span>106</span><span>Binlog_Do_DB</span><span>:</span><span>Binlog_Ignore_DB</span><span>:</span><span> mysql</span><span>,</span><span>test</span><span>,</span><span>information_schema</span><span>,</span><span>performance_schema
</span><span>1</span><span> row </span><span>in</span><span>set</span><span>(</span><span>0.00</span><span> sec</span><span>)</span>
登录后复制

记录 File 和 Position, 这时 binlog 的当前位置, 因为 Slave 要从这个位置开始同步数据.

Server B:

<span>CHANGE MASTER TO MASTER_HOST</span><span>=</span><span>'server_a'</span><span>;</span><span>
CHANGE MASTER TO MASTER_USER</span><span>=</span><span>'userx'</span><span>;</span><span>
CHANGE MASTER TO MASTER_PASSWORD</span><span>=</span><span>'xxxxx'</span><span>;</span><span>
CHANGE MASTER TO MASTER_LOG_FILE</span><span>=</span><span>'mysql-bin.000001'</span><span>,</span><span> MASTER_LOG_POS</span><span>=</span><span>106</span><span>;</span><span>
start slave</span><span>;</span><span>
show slave status\G</span>
登录后复制

同样的, 在 Server A 上也启动同步 Slave 进程.

因为我们确保了没有数据库写操作, 所以不需要 FLUSH TABLES WITH READ LOCK;.

8. 验证

在不同的数据库上执行一些更新数据的操作, 看看数据是否同步过去了.

9. 完成

恢复 crontab 任务
修改 nginx, 撤下维护网页, 恢复服务
如果你有什么问题, 或者发现里这些步骤的不足, 欢迎评论!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前 By 尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
4 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

如何优化 PHP 中的 MySQL 查询性能? 如何优化 PHP 中的 MySQL 查询性能? Jun 03, 2024 pm 08:11 PM

可以通过以下方式优化MySQL查询性能:建立索引,将查找时间从线性复杂度降至对数复杂度。使用PreparedStatements,防止SQL注入并提高查询性能。限制查询结果,减少服务器处理的数据量。优化连接查询,包括使用适当的连接类型、创建索引和考虑使用子查询。分析查询,识别瓶颈;使用缓存,减少数据库负载;优化PHP代码,尽量减少开销。

如何在 PHP 中使用 MySQL 备份和还原? 如何在 PHP 中使用 MySQL 备份和还原? Jun 03, 2024 pm 12:19 PM

在PHP中备份和还原MySQL数据库可通过以下步骤实现:备份数据库:使用mysqldump命令转储数据库为SQL文件。还原数据库:使用mysql命令从SQL文件还原数据库。

如何使用 PHP 插入数据到 MySQL 表中? 如何使用 PHP 插入数据到 MySQL 表中? Jun 02, 2024 pm 02:26 PM

如何将数据插入MySQL表中?连接到数据库:使用mysqli建立与数据库的连接。准备SQL查询:编写一个INSERT语句以指定要插入的列和值。执行查询:使用query()方法执行插入查询,如果成功,将输出一条确认消息。

如何修复 MySQL 8.4 上的 mysql_native_password 未加载错误 如何修复 MySQL 8.4 上的 mysql_native_password 未加载错误 Dec 09, 2024 am 11:42 AM

MySQL 8.4(截至 2024 年的最新 LTS 版本)中引入的主要变化之一是默认情况下不再启用“MySQL 本机密码”插件。此外,MySQL 9.0完全删除了这个插件。 此更改会影响 PHP 和其他应用程序

如何在 PHP 中使用 MySQL 存储过程? 如何在 PHP 中使用 MySQL 存储过程? Jun 02, 2024 pm 02:13 PM

要在PHP中使用MySQL存储过程:使用PDO或MySQLi扩展连接到MySQL数据库。准备调用存储过程的语句。执行存储过程。处理结果集(如果存储过程返回结果)。关闭数据库连接。

如何使用 PHP 创建 MySQL 表? 如何使用 PHP 创建 MySQL 表? Jun 04, 2024 pm 01:57 PM

使用PHP创建MySQL表需要以下步骤:连接到数据库。创建数据库(如果不存在)。选择数据库。创建表。执行查询。关闭连接。

在PHP中使用MySQLi建立数据库连接的详尽教程 在PHP中使用MySQLi建立数据库连接的详尽教程 Jun 04, 2024 pm 01:42 PM

如何在PHP中使用MySQLi建立数据库连接:包含MySQLi扩展(require_once)创建连接函数(functionconnect_to_db)调用连接函数($conn=connect_to_db())执行查询($result=$conn->query())关闭连接($conn->close())

iOS 18 新增'已恢复”相册功能 可找回丢失或损坏的照片 iOS 18 新增'已恢复”相册功能 可找回丢失或损坏的照片 Jul 18, 2024 am 05:48 AM

苹果公司最新发布的iOS18、iPadOS18以及macOSSequoia系统为Photos应用增添了一项重要功能,旨在帮助用户轻松恢复因各种原因丢失或损坏的照片和视频。这项新功能在Photos应用的"工具"部分引入了一个名为"已恢复"的相册,当用户设备中存在未纳入其照片库的图片或视频时,该相册将自动显示。"已恢复"相册的出现为因数据库损坏、相机应用未正确保存至照片库或第三方应用管理照片库时照片和视频丢失提供了解决方案。用户只需简单几步

See all articles