複製的作用:
輔助實現備份
高可用
異地容災
scale out:分攤負載
在複製當中server-id很重要
主從架構中,不使用MySQL代理,如何讓主的負責寫,從的負責讀?
1、使用前端開發程序來控制讀寫分離(增加了開發難度)
2、雙主模型(對於讀操作可以分擔負載,對於寫操作沒有分擔負載)
讀寫分離:
mysql-proxy
amoeba
數據拆分:
cobar:
一個從服務器只能屬於一個主服務器
MySQL 5.5: 複製功能實現很簡單
MySQL 5.6: gtid(更安全), multi-thread replication(多線程複製)
配置MySQL複製基本步驟:
一、master
1、啓用二進制日誌
log-bin = master-bin
log-bin-index = master-bin.index
2、選擇一個惟一server-id
server-id = {0-2^32}
3、創建具有複製權限的用戶
REPLICATION SLAVE
REPLICATION CLIENT
二、slave
1、啓用中繼日誌
relay-log = relay-log
relay-log-index =
2、選擇一個惟一的server-id
server-id = {0-2^32}
3、連接至主服務器,並開始複製數據;
mysql> CHANGER MASTER TO MASTER_HOST='',MASTER_PORT='',MASTER_LOG_FILE='',MASTER_LOG_POS='',MASTER_USER='',MASTER_PASSWORD='';
mysql> START SLAVE;
mysql> START SLAVE IO_Thread;
mysql> START SLAVE SQL_Thread;
複製線程:
master: dump
slave: IO_Thread, SQL_Thread
read-only = YES
在從服務器上設定,但對具有SUPER權限的用戶不生效;(完成後重啓服務,複製線程也會啓動)
sync-binlog = ON
在主服務器上設定,用於事務安全;
1、從服務器能不能執行“寫”操作?
CREATE
INSERT
如何阻止寫從服務器?
my.cnf
[mysqld]
read-only = 1
不能阻止 SQL Thread
如果某用戶有SUPER權限,則不被阻止;
mysql> FLUSH TABLES WITH READ LOCK;
2、一個主服務器可否多從?可以
一從是否多主?不行
3、主-->從:異步
mysql 5.5 google 補丁
半同步: semisync
半同步如果無法在指定時間完成-->自動 降到異步模式;
4、如何從服務器的mysql服務在啓動時候不要自動啓動從服務線程?
master.info
relay-log.info
在從服務器上:
[mysqld]
skip-slave-start=1
5、數據庫複製過濾
在主服務器上實現:
binlog-do-db=testdb
binlog-do-db=mydb
binlog-ignore-db=mysql
主服務器
[mysqld]
binlog-do-db=
OR
binlog-ignore-db=
在主服務器過濾:任何不涉及到數據庫相關的寫操作都不會被記錄到二進制日誌當中;
從服務器:
replicate_do_db
rpplicate_ignore_db
replicate_do_table
replicate_ignore_table
replicate_wild_do_table
replicate_wild_ignore_table
在從服務器上只複製mageedu一個數據庫:
[mysqld]
replicate_do_db=mageedu
replicate_do_db=mysql
設置半同步步驟:
在Master和Slave的mysql命令行運行如下代碼:
# On Master
mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
mysql> SET GLOBAL rpl_semi_sync_master_enabled = 1;
mysql> SET GLOBAL rpl_semi_sync_master_timeout = 1000;
# On Slave
mysql> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
mysql> SET GLOBAL rpl_semi_sync_slave_enabled = 1;
mysql> STOP SLAVE IO_THREAD; START SLAVE IO_THREAD;
在Master和Slave的my.cnf中編輯:
# On Master
[mysqld]
rpl_semi_sync_master_enabled=1
rpl_semi_sync_master_timeout=1000 # 1 second
# On Slave
[mysqld]
rpl_semi_sync_slave_enabled=1
# 也可通過設置全局變量的方式來設置,如下:
set global rpl_semi_sync_master_enabled=1
# 取消加載插件
mysql> UNINSTALL PLUGIN rpl_semi_sync_master;
==============================================
查看從服務器上的semi_sync是否開啓:
mysql> SHOW GLOBAL STATUS LIKE 'rpl_semi%';
查看主服務器上的semi_sync是否開啓,注意clients 變爲1 ,證明主從半同步複製連接成功:
mysql> SHOW GLOBAL STATUS LIKE 'rpl_semi%';
工具:
percona: percona-tools
mattkit-tools
設置主-主複製:
1、在兩臺服務器上各自建立一個具有複製權限的用戶;
2、修改配置文件:
# 主服務器上
[mysqld]
server-id = 10
log-bin = mysql-bin
relay-log = relay-mysql
relay-log-index = relay-mysql.index
auto-increment-increment = 2
auto-increment-offset = 1
#auto-increment-increment,auto-increment-offset用於解決自動增長時合併表出錯,一個用奇數,一個用偶數,起點爲1,增長爲2
# 從服務器上
[mysqld]
server-id = 20
log-bin = mysql-bin
relay-log = relay-mysql
relay-log-index = relay-mysql.index
auto-increment-increment = 2
auto-increment-offset = 2
3、如果此時兩臺服務器均爲新建立,且無其它寫入操作,各服務器只需記錄當前自己二進制日誌文件及事件位置,以之作爲另外的服務器複製起始位置即可
server1|mysql> SHOW MASTER STATUS\G
************************** 1. row ***************************
File: mysql-bin.000001
Position: 710
Binlog_Do_DB:
Binlog_Ignore_DB:
1 row in set (0.00 sec)
server2|mysql> SHOW MASTER STATUS\G
mysql> SHOW MASTER STATUS\G
*************************** 1. row ***************************
File: mysql-bin.000003
Position: 811
Binlog_Do_DB:
Binlog_Ignore_DB:
1 row in set (0.00 sec)
4、各服務器接下來指定對另一臺服務器爲自己的主服務器即可:
server1|mysql> CHANGE MASTER TO ...,MASTER_LOG_FILE='mysql-bin.000003', MASTER_LOG_POS=811
server2|mysql> CHANGE MASTER TO ...,MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=710
A: 查看B的二進制日誌文件及位置,並以及作爲自己的複製起點;
B:
MySQL主從配置
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章
bat記錄遠程桌面連接登錄信息
jason1982
2019-02-24 12:57:09
Exchange Server 2010 POP3&IMAP設置詳解
lingping
2019-02-23 14:05:54
虛擬化技術--服務器虛擬化
dawei818
2019-02-23 14:05:39
windows 2008 全新仲裁模式
qyh282110204
2019-02-23 14:05:36
軟路由建立PPPOE服務器
ct19871125
2019-02-23 14:04:24
MySQL性能優化的21個最佳實踐
fdb2b
2019-02-23 14:01:03
centos下簡單實現日誌切割,並上傳至日誌服務器。
隨風上升
2019-02-23 13:59:02
20190222全天的實驗
清歡難尋
2019-02-24 13:17:21
PHP中的pack和unpack函數
tlanyan
2019-02-24 12:35:02
解壓tomcat二進制包出錯
隨風上升
2019-02-23 13:57:36
java性能優化筆記(二)設計優化
kid2412
2019-02-24 13:34:37