您好,登錄后才能下訂單哦!
下面講講關(guān)于MySQL主從復(fù)制的常見(jiàn)問(wèn)題和有效解決方案,文字的奧妙在于貼近主題相關(guān)。所以,閑話就不談了,我們直接看下文吧,相信看完MySQL主從復(fù)制的常見(jiàn)問(wèn)題和有效解決方案這篇文章你一定會(huì)有所受益。
一、復(fù)制的問(wèn)題和解決方案:
(1)數(shù)據(jù)損壞或丟失:
某個(gè)slave上損壞:在slave上重放二進(jìn)制日志,各種原因,導(dǎo)致數(shù)據(jù)不一致。例如硬件故障
//使用其他master上的備份的數(shù)據(jù)集,在新的slave上進(jìn)行還原,從備份的位置開(kāi)始從master上進(jìn)行復(fù)制。
重新復(fù)制即可//下線故障的slave,還原然后重新復(fù)制即可
master數(shù)據(jù)損壞或丟失:
//在各個(gè)slave上根據(jù)其gtid,找出最新的salve,然后提升為master
//MHA+semi repl //MHA和一個(gè)node半同步復(fù)制,提升半同步node為新的master即可
//最后方案:
二進(jìn)制日志分析,然后還原
單個(gè)故障了:活該!
(2)混合使用存儲(chǔ)引擎;//堅(jiān)決杜絕
MyISAM不支持事務(wù)//不能回滾的
InnoDB支持事務(wù)
(3)不唯一的server id
整個(gè)復(fù)制集群,可能導(dǎo)致錯(cuò)亂。
//例如某個(gè)slave的server id和master的server id一樣,那么他就不會(huì)重放master發(fā)來(lái)的server-id
修改server id 重新復(fù)制
(4)復(fù)制延遲
從node落后于master
自己寫(xiě)腳本,不斷監(jiān)控,發(fā)現(xiàn)落后的時(shí)間不等于0,后,可以重啟slave的io線程
需要額外的監(jiān)控工具來(lái)輔助實(shí)現(xiàn)。
在master上事務(wù)是可以并發(fā)的,但是往同一個(gè)二進(jìn)制日志寫(xiě)入是單線程的
因此slave在本地應(yīng)用也是單線程的
master上有多個(gè)庫(kù),每一個(gè)庫(kù)的事務(wù)是可以并行的,因?yàn)閷?duì)A庫(kù)的鎖,對(duì)B庫(kù)是沒(méi)有影響的,但是反映到二進(jìn)制日志中必然有先后的順序
因此slave落后是沒(méi)有辦法避免的,因此mysql 5.5之后引入了多線程機(jī)制。
支持一從多主和多線程復(fù)制
多線程復(fù)制//每一個(gè)數(shù)據(jù)庫(kù)只啟用一個(gè)線程
//但是主庫(kù)是不能一樣的
多線程復(fù)制:還是有用的,依賴于gtid
//MySQL 5.6.3之后,MariaDB10.0.5之后
復(fù)制線程:Master上的IO線程和Slave上的IO、SQL線程,
數(shù)據(jù)庫(kù)服務(wù)的衡量指標(biāo):
qps:query per second
tps:事務(wù)per second
數(shù)據(jù)庫(kù)壓力測(cè)試工具:
sysbench
二、Galera Cluster:多用于MySQL的數(shù)據(jù)復(fù)制
http://galeracluster.com/
更底層的復(fù)制機(jī)制
需要單獨(dú)編譯實(shí)現(xiàn)。
安裝方式
msyql官方或者galera //官方提供的支持galera 的版本
percona-cluster //整合過(guò)mysql版本
mariadb-cluster //專用的復(fù)制
base和epel都沒(méi)有提供galera-cluster的源
默認(rèn)的mariadb版本是不支持galera的
需要用到的包:
MariaDB-5.5.46-centos7-x86_64-client.rpm
MariaDB-5.5.46-centos7-x86_64-common.rpm
MariaDB-Galera-5.5.46-centos7-x86_64-common.rpm
//至少需要3個(gè)node
1.前提:hosts文件和時(shí)間同步
node1:192.168.1.67
node2:192.168.1.68
node3:192.168.1.69
node1:
建議在本地配置yum源
yum remove mariadb //卸載client和server端
yum install MairaDB-Galera-server
node2:
建議在本地配置yum源
yum remove mariadb //卸載client和server端
yum install MairaDB-Galera-server
node3:
建議在本地配置yum源
yum remove mariadb //卸載client和server端
yum install MairaDB-Galera-server
2.配置文件說(shuō)明/etc/my.cnf.d/server.cnf
...
[galera]
# Manatory settings //強(qiáng)制配置
#wresp_provider = /usr/lib64/galera/libgalera_smm.so
#wresp_cluster_address = "gcomm://192.168.1.67, 192.168.1.68, 192.168.1.69"
#wresp_cluster_name = "mycluster"
#wresp_node_name = 'node1'
#wresp_node_address = '192.168.1.67' //這兩個(gè)可以省略
#binlog_format = row
#default_storage_engine=InnoDB
#bind-address=0.0.0.0
# Optional setting
#wsrep_slave_threads=1
#innodb_flush_logs_at_trx_commit=0
...
首次啟動(dòng):需要初始化集群,在其中一個(gè)node上執(zhí)行如下命令
/etc/init.d/mysql start --wsreq-new-cluster
而后正常啟動(dòng)其他節(jié)點(diǎn)即可
3.修改配置文件
node1:
[galera]
wresp_provider=/usr/lib64/galera/libgalera_smm.so
wresp_cluster_address="gcomm://192.168.1.67, 192.168.1.68, 192.168.1.69"
binlog_format=row
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
bind-address=0.0.0.0
wresp_cluster_name="mycluster"
node2: 和 node3: 配置文件相同
node1:任意一個(gè)node都可以
/etc/rc.d/init.d/mysql start --wsrep-new-cluster
node2:
service mysql start
node3:
service mysql start
3.測(cè)試
mysql> 任何一個(gè)node創(chuàng)建數(shù)據(jù)
在其他node上可以看到有數(shù)據(jù)
node1:
> use mydb;
> create table tb2 (id int unsigned auto_increment not null primary key,name char(30));
> insert into tb2 (name) values ('hi'),('hello');
node2:
> select * from tb2;
id | name
---------
1 | h2
4 | hello
> insert into tb2 (name) values ('to'),('from');
> select * from tb2
1 hi
4 hello
5 to
8 from
使用全局id生成器
r/w分離器:
要么自己寫(xiě)
要么使用開(kāi)源的工具
或者在應(yīng)用層配置實(shí)現(xiàn) //一旦故障需要手動(dòng)修改或者使用vrrp
親測(cè)方法:
1.復(fù)制所有的rpm文件
2.createrepot /testrepo
3.修改yum文件指向該yum源即可
4.使用yum進(jìn)行安裝即可
三、MySQL 5.6的多線程復(fù)制、GTID
注意:任何服務(wù)或者主機(jī)都應(yīng)該被監(jiān)控
mysql落后的原因:?jiǎn)尉€程復(fù)制,
5.5 半同步
5.6 GTID、多線程復(fù)制,
MariaDB在配置文件的mysqld選項(xiàng)組中添加:
slave-parallel-threads
MASTER: my.cnf添加以下參數(shù)
binlog_format = row
gtid_mode = ON
enforce-gtid-consistency = ON
slave_parallel_workers=4 --開(kāi)啟基于庫(kù)的多線程復(fù)制默認(rèn)0不開(kāi)啟
binlog_cache_size = 8M
max_binlog_size = 50M
max_binlog_cache_size = 100M
sync_binlog = 1
expire_logs_days = 1
log-slave-updates=true
SLAVE: my.cnf添加以下參數(shù)
binlog_format = row
gtid_mode = ON
enforce-gtid-consistency = ON
binlog_cache_size = 8M
max_binlog_size = 50M
max_binlog_cache_size = 100M
sync_binlog = 1
expire_logs_days = 1
slave_parallel_workers=4
max_relay_log_size = 50M
relay_log_purge = 1
relay_log_recovery = 1
master_verify_checksum = 1 --主事件校驗(yàn)
slave_sql_verify_checksum = 1 --從事件校驗(yàn)
slave_allow_batching = 1
log-slave-updates=true
對(duì)于以上MySQL主從復(fù)制的常見(jiàn)問(wèn)題和有效解決方案相關(guān)內(nèi)容,大家還有什么不明白的地方嗎?或者想要了解更多相關(guān),可以繼續(xù)關(guān)注我們的行業(yè)資訊板塊。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。