MySQL Master-Slaver Replication 讓資料庫資料有備援

标签: Database master mysql replication slaver | 发表时间:2014-10-18 08:00 | 作者:cross
出处:http://ssorc.tw

重新複習一下  資料庫同步 – MySQL + replication

Master / Slaver 架構就是要讓 MySQL 資料庫系統有著備援的保障

基本運作方式就是,MySQL  Master 這台上只要有新增刪除修改,就會記錄在 binlog 檔裡,這時 Slaver 就可以透過 Master 授權的帳號去同步資料 ( Replication ),這是單向的。雙向的話可以靠 MySQL-MMM (但架構上主機要求的台數比較多)。

其它應用則可以使用 MySQL-proxy ,讓 Master 作寫入工作,而 Slaver 就只作讀取,提高效能

實作的環境 : 這次我拿 discuz 這個 opensource 的 論壇套件 作測試

Master                                  Slaver
--------------------------------------------------------
CentOS 6.5                              CentOS 6.4
PHP 5.4.27                              PHP 5.4.33
MySQL 5.5.37                            MySQL 5.5.40
Discuz X3.2                             Discuz X3.2
ip:10.10.10.137                         ip: 10.10.10.135

Master 端

編輯 /etc/my.cnf

# 在 [mysqld] 加入
[mysqld]
# 主機 ID,不可以重複,通常 master 為 1
server-id=1
log-bin=mysqld-bin
# Log 的格式 ROW,STATEMENT,MIXED
binlog_format=MIXED
# 只 binlog 某個資料庫
binlog-do-db=discuz

其它

# binlog 多個資料庫
binlog-do-db=discuz,test2
# 或
binlog-do-db=discuz
binlog-do-db=test2
# binlog 全部資料庫,但不要 test
binlog-ignore-db=test
# 假如有 InnoDB,且有用 transaction 的話,就設定如下
innodb_flush_log_at_trx_commit=1
sync_binlog=1
# 引用 http://xyz.cinc.biz/2014/10/mysql-replication.html
# sync_binlog,設定大於等於0的數字,控制每幾次將binary log寫入硬碟,0:系統自己控制,1:最安全但效能較低
sync_binlog = 1
# innodb_flush_log_at_trx_commit,可設定0、1、2,
# 0:每秒將 log buffer 寫入 log file,並flush to disk,但在 transaction commit 時不做任何事.
# 1:預設值,transaction commit 時將 log buffer 寫入 log file,,並flush to disk.
# 2:transaction commit 時將 log buffer 寫入 log file,不過flush to disk是每秒執行一次.
innodb_flush_log_at_trx_commit=1

重啟資料庫

service mysqld restart

登入 mysql 設定授權給 slaver 的帳號

GRANT REPLICATION SLAVE ON *.* TO 'replslave'@'%' IDENTIFIED BY 'replpass';
FLUSH PRIVILEGES;

暫時鎖定,無法寫入

FLUSH TABLES WITH READ LOCK;

查看狀態

SHOW MASTER STATUS;
mysql> SHOW MASTER STATUS;
+-------------------+----------+--------------+------------------+
| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| mysqld-bin.000005 | 8536     |      discuz  |                  |
+-------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

記住 bin 檔版號,及 Position 號,這是要給 Slaver 用的,讓 Slaver 知道從那裡開始同步

再來 dump 出資料庫,這是要 copy 到 slaver 還原的

mysqldump --opt -u root -p discuz > discuz.sql

將 discuz.sql copy 到 slaver 去

Slaver 端

編輯 /etc/my.cnf

[mysqld]
# 通常就 2 以上的數字
server-id=2
# 只同步某個資料庫
replicate-do-db=discuz
# slaver ip,可以讓 master 使用 show slave hosts 得知 slaver IP 是多少
report-host=10.10.10.135

其它

# 忽略某個資料庫
replicate-ignore-db=test
# 只同步某個 table
replicate-do-table=test.test
# 也可以用 wildcard,% 就是所有資料表
replicate_wild_do_table=test.%
# 與 Master 斷線後,重新嘗試連接的時間(sec)(預設 60)
master-connect-retry=60

重啟 MySQL

service mysqld restart

登入 slaver 的 mysql

假如有啟用 slave 就先停止,及清除之前的連線

stop slave; reset slave all;

再匯入從 master copy 過來的 all.sql

mysql -u root -p discuz < discuz.sql

設定 slaver 與 master 溝通

設定 master 的 ip、帳號、密碼、binlog 序號、及 position

CHANGE MASTER TO
 MASTER_HOST='10.10.10.137',
 MASTER_USER='replslave',
 MASTER_PASSWORD='replpass',
 MASTER_LOG_FILE='mysqld-bin.000005',
 MASTER_LOG_POS=8536;

啟動 slave

start slave;

查看狀態

show slave status\G;

在  slaver 看到這兩個參數都是 Yes 就代表成功設定了

Slave_IO_Running:Yes
Slave_SQL_Running:Yes

回到 Master 端,將鎖定解開

unlock tables;

測試對 Master 寫入,看 Slaver 會不會同步

mysql replication master/slaver

QA : 如果 master restart mysql 時,slaver 會出現如下,不過同步還是運作正常的,slaver 也 restart 亦同

141014 11:01:12 [Note] Slave: received end packet from server, apparent master shutdown:
141014 11:01:12 [Note] Slave I/O thread: Failed reading log event, reconnecting to retry, log 'mysqld-bin.000004' at position 312099
141014 11:01:12 [ERROR] Slave I/O: error reconnecting to master '[email protected]:3306' - retry-time: 60  retries: 86400, Error_code: 2003
141014 11:02:12 [Note] Slave: connected to master '[email protected]:3306',replication resumed in log 'mysqld-bin.000004' at position 312099

 

The post MySQL Master-Slaver Replication 讓資料庫資料有備援 appeared first on SSORC.tw.

相关 [mysql master slaver] 推荐:

MySQL Master-Slaver Replication 讓資料庫資料有備援

- - SSORC.tw
重新複習一下  資料庫同步 – MySQL + replication. Master / Slaver 架構就是要讓 MySQL 資料庫系統有著備援的保障. 基本運作方式就是,MySQL  Master 這台上只要有新增刪除修改,就會記錄在 binlog 檔裡,這時 Slaver 就可以透過 Master 授權的帳號去同步資料 ( Replication ),這是單向的.

MySQL Multi-Master实现方式

- - P.Linux Laboratory
本文内容遵从 CC版权协议, 可以随意转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明网址: http://www.penglixun.com/tech/database/how_to_mysql_multi_master.html. MySQL Mutil-Master Replication喊了很久了,但是MySQL一直没有去,虽然在MySQL源码中有注释将实现Multi-Master,mi结构体也为Multi-Master做好了准备,但是却一直不见MySQL发布.

MySQL HA Solution 2019(1)Master Slave on MySQL 5.7

- - 企业架构 - ITeye博客
已有 0 人发表留言,猛击->> 这里<<-参与讨论. —软件人才免语言低担保 赴美带薪读研.

mysql master/slave 数据库备份

- - 数据库 - ITeye博客
出自:http://blog.csdn.net/mer1234567/article/details/7405775.       Mysql内建的复制功能是构建大型,高性能应用程序的基础. 将Mysql的数据分布到多个系统上去,这种分布的机制,是通过将Mysql的某一台主机的数据复制到其它主机(slaves)上,并重新执行一遍来实现的.

MySQL主从复制(Master-Slave)与读写分离(MySQL-Proxy)实践

- - CSDN博客推荐文章
接触php已快有3年了,一直想有所突破,最近看了下分布和数据库读写分离. 总算也小有成果.....前段时间发布了,用ngix实现分流. nginx 配置轮询分流-实现负载均衡【测试通过】. 今天就来分享一下,数据库读写分离并且同步. 我目前,介绍的是1台写入服务器,n台读取服务器..... 写这个的同时,我在思考一个问题,如果写入压力过大的时候,1台服务器写入不够用,那么写入该怎么办.

Adobe CS5.5 Master Collection破解版

- changwei - 软矿
早前Adobe全线产品升级至CS5.5,详见“Adobe CS5.5全系列产品简体中文版下载”,我一度想通过Adobe官方的下载链接下载,但不是速度太慢就是下载到一半时提示软件下载出错. 后来还好有好心网友上传安装文件至电驴. 可惜的是,目前也只有找到Adobe CS5.5 Master Collection(大师版)的电驴下载链接,未下载的朋友可以猛点击这里(此版本只有英文版)下载.

项目经理和Scrum Master

- - InfoQ cn
在博客上,大家对于Scrum Master和项目经理这两个角色依旧争论不休,许多评论员清晰地指出两者的不同,并表示两者不可并存,更不适合合二为一. Steve Hunton在Scrumalliance站点上发布了名为《 Scrum Master并不是项目经理的别名》的博文,他提到:. 与大众的认识相反,Scrum Master和项目经理这两个角色是完全不同的,也不应该混为一谈.

blong/clickhouse .md at master · xingxing9688/blong · GitHub

- -
https://clickhouse.yandex/tutorial.html快速搭建集群参考. https://clickhouse.yandex/reference_en.html官网文档. https://habrahabr.ru/company/smi2/blog/317682/关于集群配置参考.

自己动手实现Multi-Master Replication

- - P.Linux Laboratory
本文内容遵从 CC版权协议, 可以随意转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明网址: http://www.penglixun.com/tech/database/diy_multi_master_replication.html. 首发: http://www.mysqlops.com/2012/02/14/diy_multi_master_replication.html.

搭建MongoDB主从复制(Master-Slave)集

- - CSDN博客数据库推荐文章
  主从复制是MongoDB数据库一种特性,它通过数据备份来提高数据库的容灾能力. 但是由于主从复制并不能自动实现故障转移的特性,MongoDB在1.6版本开发了新的复制模式:Replicate Sets. MongoDB建议不要再使用Master-Slave模式对数据进行备份. 但是对于学习来说,我们仍可以了解一下MongoDB的主从复制模式.