真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

如何理解MariaDB.10.5.1這個(gè)版本-創(chuàng)新互聯(lián)

今天就跟大家聊聊有關(guān)如何理解MariaDB.10.5.1這個(gè)版本,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),沙河口企業(yè)網(wǎng)站建設(shè),沙河口品牌網(wǎng)站建設(shè),網(wǎng)站定制,沙河口網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷(xiāo),網(wǎng)絡(luò)優(yōu)化,沙河口網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專(zhuān)業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。

提示:本博文演示環(huán)境是基于centos7.2 x86_64位,最小化安裝系統(tǒng),MariaDB.10.5.1二進(jìn)制安裝來(lái)進(jìn)行的

一、簡(jiǎn)單介紹下slave庫(kù)的并行復(fù)制模式

slave_parallel_mode的 slave并行復(fù)制的5種模式:
官方給的5種模式

Description: Controls what transactions are applied in parallel when using parallel replication.
optimistic: tries to apply most transactional DML in parallel, and handles any conflicts with rollback and retry. See optimistic mode.
conservative: limits parallelism in an effort to avoid any conflicts. See conservative mode.
aggressive: tries to maximize the parallelism, possibly at the cost of increased conflict rate.
minimal: only parallelizes the commit steps of transactions.
none: disables parallel apply completely.

in-order 有序并行復(fù)制的optimistic樂(lè)觀模式為在slave上并行應(yīng)用提供了很多機(jī)會(huì),同時(shí)從應(yīng)用程序的角度來(lái)看,仍然保留精確的事務(wù)語(yǔ)義。這是MariaDB 10.5.1中的默認(rèn)模式

二、master_use_gtid 參數(shù)說(shuō)明:

配置主從復(fù)制時(shí), CHANGE MASTER TO master_use_gtid = { slave_pos | current_pos | no } 這3個(gè)參數(shù)介紹:

2.1、CHANGE MASTER TO master_use_gtid=slave_pos 介紹:

假如:
A slave is configured to use GTID by CHANGE MASTER TO master_use_gtid=slave_pos

當(dāng)slave從站連接到master主站時(shí),它將在復(fù)制到從站的最后一個(gè)GTID的位置開(kāi)始復(fù)制,這可以在變量gtid_slave_pos中看到。由于所有復(fù)制服務(wù)器上的GTID均相同,因此可以將從屬服務(wù)器指向其他主服務(wù)器,并自動(dòng)確定正確的位置。

如果不希望更改從屬服務(wù)器上的binlog會(huì)影響GTID復(fù)制位置,則應(yīng)使用master_use_gtid = slave_pos。然后,從站將始終在最后復(fù)制的GTID位置連接到主站。
對(duì)于期望與傳統(tǒng)復(fù)制保持一致行為的用戶來(lái)說(shuō),這可以避免一些意外,因?yàn)閺?fù)制位置永遠(yuǎn)不會(huì)因服務(wù)器上進(jìn)行的本地更改而改變

如果在從站上寫(xiě)入任何本地事務(wù),則在使用值current_pos時(shí)可能會(huì)遇到問(wèn)題。例如,如果在slave從屬線程停止時(shí)發(fā)出INSERT語(yǔ)句或以其他方式寫(xiě)入表,則可能在gtid_binlog_pos中生成新的本地GTID,這將影響從屬的gtid_current_pos值。重新啟動(dòng)從屬線程時(shí),這可能會(huì)導(dǎo)致錯(cuò)誤,因?yàn)橹骺刂破鲗⒉淮嬖诒镜谿TID。您可以通過(guò)將MASTER_USE_GTID復(fù)制參數(shù)設(shè)置為slave_pos而不是current_pos來(lái)糾正此問(wèn)題。

重要提示:下面3種場(chǎng)景的演示環(huán)境: centos7.2_x86_64位    MariaDB.10.5.1 二進(jìn)制安裝
mgr01  172.16.0.130  master
mgr03  172.16.0.131  slave

1.場(chǎng)景1:當(dāng)線上的master庫(kù)運(yùn)行了一段時(shí)間,而且數(shù)據(jù)庫(kù)的數(shù)據(jù)很少。針對(duì)此場(chǎng)景給master庫(kù)部署一個(gè)全新的slave庫(kù)

mgr03啟動(dòng)后默認(rèn)情況下GTID位點(diǎn)都是空的,尤其是gtid_slave_pos  這個(gè)是空的

(root@'mgr03':mysql.sock)[(none)]>show variables like 'Gtid%';
+-------------------------+-------+
| Variable_name           | Value |
+-------------------------+-------+
| gtid_binlog_pos         |       |
| gtid_binlog_state       |       |
| gtid_cleanup_batch_size | 64    |
| gtid_current_pos        |       |
| gtid_domain_id          | 0     |
| gtid_ignore_duplicates  | OFF   |
| gtid_pos_auto_engines   |       |
| gtid_seq_no             | 0     |
| gtid_slave_pos          |       |
| gtid_strict_mode        | OFF   |
+-------------------------+-------+
10 rows in set (0.00 sec)

(root@'mgr03':mysql.sock)[(none)]>ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
Query OK, 0 rows affected (0.02 sec)

(root@'mgr03':mysql.sock)[(none)]>show variables like 'Gtid%';
+-------------------------+-------------+
| Variable_name           | Value       |
+-------------------------+-------------+
| gtid_binlog_pos         | 0-1313306-1 |
| gtid_binlog_state       | 0-1313306-1 |
| gtid_cleanup_batch_size | 64          |
| gtid_current_pos        | 0-1313306-1 |
| gtid_domain_id          | 0           |
| gtid_ignore_duplicates  | OFF         |
| gtid_pos_auto_engines   |             |
| gtid_seq_no             | 0           |
| gtid_slave_pos          |             |
| gtid_strict_mode        | OFF         |
+-------------------------+-------------+
10 rows in set (0.01 sec)

master操作:

提示:reset master 這一步操作不是必須的,除非在這個(gè)庫(kù)之前,此數(shù)據(jù)庫(kù)做過(guò)別的集群的slave庫(kù)。尤其是在master庫(kù)上,嚴(yán)禁此操作,除非你清楚的知道自己在干什么

mysql -e "grant replication slave on *.* to repuser@'172.16.0.%' identified by 'JuwoSdk21TbUser'; flush privileges;"
mysqldump -uroot -p'123456' -B -A -F  --master-data=2 --single-transaction  --events|gzip >test.sql.gz
scp -rp -P52110 /opt/tes.sql.gz root@172.16.0.131:/root

slave操作:

(root@'mgr03':mysql.sock)[test]>source /root/test.sql
CHANGE MASTER TO MASTER_HOST='mgr01',MASTER_PORT=3306,MASTER_USER='repuser',MASTER_PASSWORD='JuwoSdk21TbUser',master_use_gtid=slave_pos;start slave;show slave status\G

2.場(chǎng)景2: 當(dāng)線上的master庫(kù)運(yùn)行了一段時(shí)間,而且數(shù)據(jù)庫(kù)的數(shù)據(jù)很少。針對(duì)此場(chǎng)景給master庫(kù)部署一個(gè)slave庫(kù)。但是這個(gè)新slave庫(kù)之前有做過(guò)其他的項(xiàng)目的主庫(kù)

那么初始位置需要手動(dòng)設(shè)置為空:SET GLOBAL gtid_slave_pos = "";

mgr01-master :
當(dāng)前gtid情況:

root@localhost [test]>show variables like 'Gtid%';
+-------------------------+--------------+
| Variable_name           | Value        |
+-------------------------+--------------+
| gtid_binlog_pos         | 0-1283306-50 |
| gtid_binlog_state       | 0-1283306-50 |
| gtid_cleanup_batch_size | 64           |
| gtid_current_pos        | 0-1283306-50 |
| gtid_domain_id          | 0            |
| gtid_ignore_duplicates  | OFF          |
| gtid_pos_auto_engines   |              |
| gtid_seq_no             | 0            |
| gtid_slave_pos          | 0-1313306-41 |
| gtid_strict_mode        | OFF          |
+-------------------------+--------------+
10 rows in set (0.001 sec)

mgr03-slave:
當(dāng)前gtid情況:

(root@'mgr03':mysql.sock)[test]>show variables like 'Gtid%';
+-------------------------+---------------------------+
| Variable_name           | Value                     |
+-------------------------+---------------------------+
| gtid_binlog_pos         | 0-1313306-45              |
| gtid_binlog_state       | 0-1283306-42,0-1313306-45 |
| gtid_cleanup_batch_size | 64                        |
| gtid_current_pos        | 0-1313306-45              |
| gtid_domain_id          | 0                         |
| gtid_ignore_duplicates  | OFF                       |
| gtid_pos_auto_engines   |                           |
| gtid_seq_no             | 0                         |
| gtid_slave_pos          | 0-1283306-42              |
| gtid_strict_mode        | OFF                       |
+-------------------------+---------------------------+
10 rows in set (0.00 sec)

具體操作:

master操作:

mysql -e "grant replication slave on *.* to repuser@'172.16.0.%' identified by 'JuwoSdk21TbUser'; flush privileges;"

mysqldump -uroot -p'123456' -B -A -F  --master-data=2 --single-transaction  --events|gzip >test.sql.gz

scp -rp -P52110 /opt/test.sql.gz root@172.16.0.131:/root

slave操作:

(root@'mgr03':mysql.sock)[test]>source /root/test.sql

(root@'mgr03':mysql.sock)[test]>reset master ;
(root@'mgr03':mysql.sock)[test]>stop slave;
Query OK, 0 rows affected (0.12 sec)
(root@'mgr03':mysql.sock)[test]>reset slave all;
(root@'mgr03':mysql.sock)[test]>SET GLOBAL gtid_slave_pos = "";
Query OK, 0 rows affected (0.03 sec)

(root@'mgr03':mysql.sock)[test]>show variables like 'Gtid%';
+-------------------------+-------+
| Variable_name           | Value |
+-------------------------+-------+
| gtid_binlog_pos         |       |
| gtid_binlog_state       |       |
| gtid_cleanup_batch_size | 64    |
| gtid_current_pos        |       |
| gtid_domain_id          | 0     |
| gtid_ignore_duplicates  | OFF   |
| gtid_pos_auto_engines   |       |
| gtid_seq_no             | 0     |
| gtid_slave_pos          |       |
| gtid_strict_mode        | OFF   |
+-------------------------+-------+
10 rows in set (0.00 sec)

(root@'mgr03':mysql.sock)[test]>CHANGE MASTER TO MASTER_HOST='mgr01',MASTER_PORT=3306,MASTER_USER='repuser',MASTER_PASSWORD='JuwoSdk21TbUser',master_use_gtid=slave_pos;start slave;show slave status\G

3.場(chǎng)景三:從mysqldump或者XtraBackup或者M(jìn)ariabackup備份集設(shè)置

這兩種方式都可以在非阻塞的情況下獲得備份時(shí)正確的Binlog位點(diǎn)(所有表都要是事務(wù)引擎),當(dāng)然,如果備份時(shí)不會(huì)有寫(xiě)入,那么 SHOW MASTER STATUS 也能提供正確的位點(diǎn)。
一旦獲取了備份時(shí)正確的Binlog位點(diǎn)(文件名和偏移量),那么就可以用BINLOG_GTID_POS()函數(shù)來(lái)計(jì)算GTID:SELECT BINLOG_GTID_POS("mysql-bin.000011",342);

使用mysqldump +gtid 方式新建slave:

從MariaDB 10.0.13版本開(kāi)始,mysqldump會(huì)自動(dòng)完成這個(gè)工作,并且把GTID的寫(xiě)在導(dǎo)出文件中,只要設(shè)置 –master-data 或 -dump-slave 的同時(shí)設(shè)置 --gtid 即可。

mgr01-master:

[root@mgr01 ~]# mysqldump -uroot -p'123456' -B -A -F  --master-data=1 --gtid  --single-transaction  --events >2.sql
[root@mgr01 ~]# 
[root@mgr01 ~]# grep  'CHANGE MASTER TO' 2.sql
-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000011', MASTER_LOG_POS=342;
CHANGE MASTER TO MASTER_USE_GTID=slave_pos;

(root@'mgr01':mysql.sock)[(none)]>SELECT BINLOG_GTID_POS("mysql-bin.000011",342);
+-----------------------------------------+
| BINLOG_GTID_POS("mysql-bin.000011",342) |
+-----------------------------------------+
| 0-1283306-68                            |
+-----------------------------------------+
1 row in set (0.009 sec)

[root@mgr01 ~]# scp -rp -P52110 2.sql root@'172.16.0.131':/root

slave庫(kù)操作:

(root@'mgr03':mysql.sock)[test]>source /root/2.sql
(root@'mgr03':mysql.sock)[test]>show variables like 'gtid_slave_pos';
+----------------+--------------+
| Variable_name  | Value        |
+----------------+--------------+
| gtid_slave_pos | 0-1283306-68 |
+----------------+--------------+
1 row in set (0.00 sec)

(root@'mgr03':mysql.sock)[test]>SET GLOBAL gtid_slave_pos = "0-1283306-68";   這一步可有可無(wú)
(root@'mgr03':mysql.sock)[test]>CHANGE MASTER TO MASTER_HOST='mgr01',MASTER_PORT=3306,MASTER_USER='repuser',MASTER_PASSWORD='JuwoSdk21TbUser',master_use_gtid=slave_pos;start slave;show slave status\G

使用當(dāng)日Mariabackup的全備份來(lái)新建一個(gè)slave庫(kù):

mgr01 master 庫(kù)上操作:

master主庫(kù)上創(chuàng)建備份用戶
root@localhost [(none)]>grant  reload,replication client,lock tables,process,super on *.* to mariabackup@'127.0.0.1' identified by 'mypassword';flush privileges;

 mariabackup --backup --target-dir=/data/backup/  --user=mariabackup --password=mypassword  --host=127.0.0.1
 mariabackup --prepare --target-dir=/data/backup/

cd /data/; tar zcf bak.tar.gz ./backup
scp -rp -P22 bak.tar.gz root@172.16.0.131:/root

[root@mgr01 data]# cat /data/backup/xtrabackup_binlog_info 
mysql-bin.000013    746 0-1283306-74

mgr03 slave庫(kù)上操作:

[root@mgr03 ~]# mariabackup  --defaults-file=/etc/my.cnf  --copy-back  --target-dir=/data/backup/
 chown -R mysql.mysql  /data/mysql/mysql3306/data
 /etc/init.d/mysql start

 基于Gtid復(fù)制配置:
SET GLOBAL gtid_slave_pos = "0-1283306-74";
CHANGE MASTER TO MASTER_HOST='mgr01',MASTER_PORT=3306,MASTER_USER='repuser',MASTER_PASSWORD='JuwoSdk21TbUser',master_use_gtid=slave_pos;start slave;show slave status\G

基于File and Position復(fù)制配置:

CHANGE MASTER TO 
   MASTER_HOST='mgr01', 
   MASTER_PORT=3306, 
   MASTER_USER="repuser",  
   MASTER_PASSWORD="JuwoSdk21TbUser", 
   MASTER_LOG_FILE='mysql-bin.000013',
   MASTER_LOG_POS=746;
START SLAVE;

從一個(gè)線上的slave庫(kù)進(jìn)行 mariabackup備份數(shù)據(jù)庫(kù),然后利用這個(gè)備份做當(dāng)前master庫(kù)的slave庫(kù):
基于Gtid復(fù)制配置:
master庫(kù)操作:

mariabackup --backup --slave-info --safe-slave-backup --target-dir=/data/backup/  --user=mariabackup --password=mypassword
 mariabackup --prepare --target-dir=/data/backup/
 cd /data/; tar zcf bak.tar.gz ./backup
scp -rp -P22 bak.tar.gz root@172.16.0.131:/root
[root@mgr01 data]# cat /data/backup/xtrabackup_binlog_info 
mysql-bin.000013    746 0-1283306-74

slave庫(kù)操作:

SET GLOBAL gtid_slave_pos = "0-1283306-74";
CHANGE MASTER TO MASTER_HOST='mgr01',MASTER_PORT=3306,MASTER_USER='repuser',MASTER_PASSWORD='JuwoSdk21TbUser',master_use_gtid=slave_pos;start slave;show slave status\G

2.2、CHANGE MASTER TO master_use_gtid=curren_pos 介紹:

假設(shè)我們?cè)O(shè)置了兩個(gè)服務(wù)器A和B,讓A作為master主服務(wù)器,而B(niǎo)作為slave從服務(wù)器。它運(yùn)行了一段時(shí)間。然后在某個(gè)時(shí)候,masterA掛掉了,而slaveB成為了新的master。
然后,稍后我們想添加源masterA作為備庫(kù),也就是作為新的master 的slave庫(kù)。
因?yàn)锳之前從來(lái)不是slave庫(kù),它沒(méi)有任何先前復(fù)制的GTID,并且gtid_slave_pos是空的,
為了允許A自動(dòng)添加為slave庫(kù),可以使用master_use_gtid = current_pos,這將使用變量gtid_current_pos的值而不是gtid_slave_pos進(jìn)行連接,gtid_current_pos該變量還考慮了當(dāng)服務(wù)器作為主服務(wù)器時(shí)寫(xiě)入二進(jìn)制日志中的GTID。
使用master_use_gtid = current_pos時(shí),在使用CHANGE MASTER之前無(wú)需考慮服務(wù)器是master還是slave.
但是必須注意不要將多余的事務(wù)注入到slave 上的binlog中,這些事務(wù)不打算復(fù)制到其他服務(wù)器。
如果這樣的額外事務(wù)是slave服務(wù)器啟動(dòng)時(shí)最新的事務(wù),它將用作復(fù)制的起點(diǎn)。這可能會(huì)失敗,因?yàn)樵撌聞?wù)不在master主服務(wù)器上。為了避免slave從屬服務(wù)器上的本地事務(wù)更改進(jìn)入binlog,請(qǐng)將slave上的sql_log_bin設(shè)置為0。

啟用GTID嚴(yán)格模式(通過(guò)將@@ GLOBAL.gtid_strict_mode設(shè)置為1)時(shí),通常最好使用current_pos。在嚴(yán)格模式下,不允許在主服務(wù)器上進(jìn)行額外的事務(wù)
提示:
不應(yīng)以任何其他方式修改mysql.gtid_slave_pos表。特別是,請(qǐng)勿嘗試更新表中的行以更改從站對(duì)當(dāng)前GTID位置的想法

2.3、CHANGE MASTER TO master_use_gtid =no

看完上述內(nèi)容,你們對(duì)如何理解MariaDB.10.5.1這個(gè)版本有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司行業(yè)資訊頻道,感謝大家的支持。


當(dāng)前文章:如何理解MariaDB.10.5.1這個(gè)版本-創(chuàng)新互聯(lián)
標(biāo)題URL:http://weahome.cn/article/cepedi.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部