做網(wǎng)站客戶一般會(huì)問(wèn)什么問(wèn)題寧波seo外包推廣排名
作者:俊達(dá)
clone插件介紹
mysql 8.0.17版本引入了clone插件。使用clone插件可以對(duì)本地l或遠(yuǎn)程的mysql實(shí)例進(jìn)行clone操作。clone插件會(huì)拷貝innodb存儲(chǔ)引擎表,clone得到的是原數(shù)據(jù)庫(kù)的一個(gè)一致性的快照,可以使用該快照數(shù)據(jù)來(lái)啟動(dòng)新的實(shí)例。clone插件還會(huì)記錄數(shù)據(jù)庫(kù)的binlog位點(diǎn),可以將clone得到的實(shí)例作為源實(shí)例的備庫(kù)??梢酝ㄟ^(guò)clone插件實(shí)習(xí)MySQL InnoDB存儲(chǔ)引擎數(shù)據(jù)的物理備份。MySQL Group Replication中可以使用clone插件來(lái)初始化新節(jié)點(diǎn)的數(shù)據(jù)。
clone插件支持本地clone和遠(yuǎn)程clone兩種模式。本地clone將clone數(shù)據(jù)存放在實(shí)例所在主機(jī)。遠(yuǎn)程clone涉及到兩個(gè)實(shí)例,提供數(shù)據(jù)的實(shí)例稱為捐贈(zèng)者(Donor),接收數(shù)據(jù)的實(shí)例稱為接收者(Recipient)。捐贈(zèng)者將clone的數(shù)據(jù),通過(guò)MySQL協(xié)議發(fā)送給接受者,接受者將數(shù)據(jù)存放到數(shù)據(jù)目錄。
使用clone插件
安裝clone插件
可以在配置文件中配置:
[mysqld]
plugin-load-add=mysql_clone.so
或者通過(guò)install plugin命令安裝插件:
mysql> install plugin clone soname 'mysql_clone.so';
通過(guò)show plugins命令或查詢plugins表查看插件狀態(tài):
mysql> SELECT PLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS-> WHERE PLUGIN_NAME = 'clone';+-------------+---------------+
| PLUGIN_NAME | PLUGIN_STATUS |
+-------------+---------------+
| clone | ACTIVE |
+-------------+---------------+
本地clone
本地clone得到的數(shù)據(jù)文件和原實(shí)例(被clone的實(shí)例)存放在同一臺(tái)主機(jī)。
使用clone local命令發(fā)起本地clone,需要指定clone數(shù)據(jù)的存放路徑。執(zhí)行clone命令的賬號(hào)需要backup_admin權(quán)限。
GRANT BACKUP_ADMIN ON *.* TO 'clone_user';
使用clone local命令:
CLONE LOCAL DATA DIRECTORY '/data/clone/mysql02_backup';
運(yùn)行mysql的OS賬號(hào)需要有相應(yīng)路徑的讀寫(xiě)權(quán)限,不然clone命令會(huì)有以下錯(cuò)誤:
ERROR 1006 (HY000): Can't create database '/data/clone/mysql02_backup/' (errno: 13 - Permission denied)
如果指定路徑已經(jīng)存在,clone命令也會(huì)報(bào)錯(cuò):
ERROR 1007 (HY000): Can't create database '/data/clone/mysql02_backup'; database exists
查看clone狀態(tài)
通過(guò) performance_schema中的clone_status表,可以查詢當(dāng)前clone操作的狀態(tài):
mysql> select * from performance_schema.clone_status\G
*************************** 1. row ***************************ID: 1PID: 55STATE: CompletedBEGIN_TIME: 2023-08-22 15:11:26.581END_TIME: 2023-08-22 15:11:36.646SOURCE: LOCAL INSTANCEDESTINATION: /data/clone/mysql02_backup/ERROR_NO: 0ERROR_MESSAGE:BINLOG_FILE:
BINLOG_POSITION: 0GTID_EXECUTED:
1 row in set (0.00 sec)
使用clone的數(shù)據(jù)啟動(dòng)實(shí)例
clone得到的文件,是原實(shí)例的一個(gè)一致性的快照,可以使用這些文件來(lái)啟動(dòng)mysql實(shí)例。clone只備份了innodb表,不備份mysql的配置文件??墒謩?dòng)創(chuàng)建一個(gè)配置文件,將datadir指向clone路徑,就可以啟動(dòng)mysql實(shí)例:
##/data/clone/my.cnf
[mysqld]
port=3333
datadir=/data/clone/mysql02_backup
...
mysqld_safe --defaults-file=/data/clone/my.cnf &
遠(yuǎn)程clone
遠(yuǎn)程clone將數(shù)據(jù)從捐贈(zèng)者(Donor)復(fù)制到接收者(Recipient)。接收者實(shí)例原有的數(shù)據(jù)會(huì)被清理掉。
使用clone instance命令發(fā)起遠(yuǎn)程clone:
CLONE INSTANCE FROM 'user'@'host':port
IDENTIFIED BY 'password'
[DATA DIRECTORY [=] 'clone_dir']
[REQUIRE [NO] SSL];
命令參數(shù)含義:
user:登陸捐贈(zèng)者實(shí)例的用戶名
host:捐贈(zèng)者實(shí)例的主機(jī)名或IP
port:捐贈(zèng)者實(shí)例的端口
password:捐贈(zèng)者實(shí)例的密碼
clone_dir:不指定clone_dir時(shí),會(huì)清空接受者實(shí)例的datadir目錄,并將數(shù)據(jù)放到datadir指定路徑。如果指定了data directory,則該路徑需要不存在,mysql服務(wù)需要有目錄權(quán)限。
REQUIRE [NO] SSL:指定傳輸數(shù)據(jù)是是否使用加密協(xié)議。
遠(yuǎn)程clone前置條件
使用遠(yuǎn)程clone需要滿足以下幾點(diǎn)前置條件:
賬號(hào)權(quán)限,捐贈(zèng)者的賬號(hào)需要有backup_admin權(quán)限。接受者的賬號(hào)需要clone_admin權(quán)限。clone_admin權(quán)限包含backup_admin權(quán)限和shutdown權(quán)限。
捐贈(zèng)者和接受者的版本需要保持一致。不僅大版本要一樣,小版本也要一樣??墒褂胹how variables命令查看版本。
mysql> SHOW VARIABLES LIKE 'version';
+---------------+--------+
| Variable_name | Value |
+---------------+--------+
| version | 8.0.32 |
+---------------+--------+
捐贈(zèng)者和接受者的運(yùn)行平臺(tái)和操作系統(tǒng)需要一致。
捐贈(zèng)者和接受者都需要安裝clone插件。
捐贈(zèng)者和接受者字符集需要一樣(character_set_server,collation_server)。
捐贈(zèng)者和接受者的參數(shù)innodb_page_size,innodb_data_file_path需要一樣。
接受者上,參數(shù)clone_valid_donor_list需要包含捐贈(zèng)者的地址。
默認(rèn)情況下,遠(yuǎn)程clone會(huì)在完成數(shù)據(jù)clone后,關(guān)閉接受者實(shí)例。需要有控制進(jìn)程(如mysqld_safe腳本、systemctl等)來(lái)拉起接受者實(shí)例。如果缺少控制進(jìn)程,則接受者實(shí)例關(guān)閉后,無(wú)法自動(dòng)啟動(dòng)。
ERROR 3707 (HY000): Restart server failed (mysqld is not managed by supervisor process).
遠(yuǎn)程clone操作步驟
1、在捐贈(zèng)者實(shí)例上創(chuàng)建相關(guān)賬號(hào)并授權(quán)
mysql> CREATE USER 'donor'@'%' IDENTIFIED BY 'password';
mysql> GRANT BACKUP_ADMIN on *.* to 'donor'@'%';
2、在接受者實(shí)例上創(chuàng)建賬號(hào)并授權(quán)
CREATE USER 'recipient'@'' IDENTIFIED BY 'password';
GRANT CLONE_ADMIN on *.* to 'recipient'@'%';
3、登陸接受者實(shí)例,發(fā)起clone操作
CLONE INSTANCE FROM 'donor'@'host':port
IDENTIFIED BY 'password';
clone完成后,會(huì)自動(dòng)重啟接受者實(shí)例。
clone插件的限制
8.0.27版本之前,clone時(shí),捐贈(zèng)者和接受者都不允許進(jìn)行DDL。從8.0.27版本開(kāi)始,捐贈(zèng)者默認(rèn)可以進(jìn)行DDL??梢杂蓞?shù)clone_block_ddl進(jìn)行控制。clone_block_ddl設(shè)置為ON時(shí),clone運(yùn)行時(shí),DDL會(huì)被阻塞。
一次只能clone一個(gè)實(shí)例。
clone插件不會(huì)復(fù)制mysql參數(shù)。clone時(shí),不會(huì)將捐贈(zèng)者實(shí)例的參數(shù)復(fù)制到接受者實(shí)例。
clone插件不會(huì)復(fù)制binlog。
clone插件只復(fù)制存儲(chǔ)在innodb存儲(chǔ)引擎中的數(shù)據(jù)。不會(huì)復(fù)制myisam、csv等其他存儲(chǔ)引擎的數(shù)據(jù)。
不支持通過(guò)mysql router連接到捐贈(zèng)者實(shí)例
本地clone操作不支持復(fù)制使用絕對(duì)路徑的通用表空間。
更多技術(shù)信息請(qǐng)查看云掣官網(wǎng)https://yunche.pro/?t=yrgw