重慶分公司,新征程啟航
為企業(yè)提供網(wǎng)站建設(shè)、域名注冊、服務(wù)器等服務(wù)
為企業(yè)提供網(wǎng)站建設(shè)、域名注冊、服務(wù)器等服務(wù)
MySQL 復(fù)制表
網(wǎng)站制作、成都做網(wǎng)站的關(guān)注點(diǎn)不是能為您做些什么網(wǎng)站,而是怎么做網(wǎng)站,有沒有做好網(wǎng)站,給創(chuàng)新互聯(lián)建站一個(gè)展示的機(jī)會來證明自己,這并不會花費(fèi)您太多時(shí)間,或許會給您帶來新的靈感和驚喜。面向用戶友好,注重用戶體驗(yàn),一切以用戶為中心。
如果我們需要完全的復(fù)制MySQL的數(shù)據(jù)表,包括表的結(jié)構(gòu),索引,默認(rèn)值等。 如果僅僅使用CREATE TABLE … SELECT 命令,是無法實(shí)現(xiàn)的。
本章節(jié)將為大家介紹如何完整的復(fù)制MySQL數(shù)據(jù)表,步驟如下:
使用 SHOW CREATE TABLE 命令獲取創(chuàng)建數(shù)據(jù)表(CREATE TABLE) 語句,該語句包含了原數(shù)據(jù)表的結(jié)構(gòu),索引等。
復(fù)制以下命令顯示的SQL語句,修改數(shù)據(jù)表名,并執(zhí)行SQL語句,通過以上命令 將完全的復(fù)制數(shù)據(jù)表結(jié)構(gòu)。
如果你想復(fù)制表的內(nèi)容,你就可以使用 INSERT INTO … SELECT 語句來實(shí)現(xiàn)。
-from 樹懶學(xué)堂 - 一站式數(shù)據(jù)知識平臺
MySQL 8.0.17 clone 插件的安裝和驗(yàn)證過程
安裝非常簡單,與安裝其他插件的工作方式相同。下面是安裝克隆插件的命令行:
master [localhost:45008] ((none)) INSTALL PLUGIN clone SONAME 'mysql_clone.so';Query OK, 0 rows affected (0.00 sec)
以及如何檢查克隆插件是否處于活動(dòng)狀態(tài):master [localhost:45008] ((none)) SELECT PLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINSWHERE PLUGIN_NAME LIKE 'clone';+-------------+---------------+| PLUGIN_NAME | PLUGIN_STATUS |+-------------+---------------+| clone | ACTIVE |+-------------+---------------+1 row in set (0.00 sec)
請注意,這些步驟需要在 Donor(供體)和 Recipient(受體,也成為 Slave)上都執(zhí)行。執(zhí)行安裝后,插件將在重新啟動(dòng)后自動(dòng)加載,因此您不必再擔(dān)心這一點(diǎn)。接下來,我們將在 Donor 上創(chuàng)建具有必要權(quán)限的用戶,這樣我們就可以遠(yuǎn)程連接到實(shí)例來克隆它。
master [localhost:45008] ((none)) create user clone_user@'%' identified by 'sekret';
Query OK, 0 rows affected (0.01 sec)
master [localhost:45008] ((none)) GRANT BACKUP_ADMIN ON *.* TO 'clone_user'@'%';
Query OK, 0 rows affected (0.00 sec)
作為安全措施,我建議將百分號 % 替換為從機(jī)的 IP、主機(jī)名或網(wǎng)絡(luò)掩碼,以便只有未來的從服務(wù)器才能接受連接。現(xiàn)在,從服務(wù)器上,克隆用戶需要CLONE_ADMIN 權(quán)限來替換從機(jī)數(shù)據(jù),在克隆操作期間阻止 DDL 并自動(dòng)重新啟動(dòng)服務(wù)器。
slave1 [localhost:45009] ((none)) create user clone_user@'localhost' identified by 'sekret';
Query OK, 0 rows affected (0.01 sec)
slave1 [localhost:45009] ((none)) GRANT CLONE_ADMIN ON *.* TO 'clone_user'@'localhost';
Query OK, 0 rows affected (0.00 sec)
接下來,安裝并驗(yàn)證插件,并在主和從服務(wù)器上創(chuàng)建用戶。
克隆過程
如上所述,克隆過程可以在本地或遠(yuǎn)程執(zhí)行。此外,它支持復(fù)制,這意味著克隆操作從捐贈(zèng)者提取和傳輸復(fù)制坐標(biāo)并將其應(yīng)用于收件人。它可用于 GTID 或非 GTID 復(fù)制。因此,要開始克隆過程,首先,讓我們確保有一個(gè)有效的供體(Master)。這由 clone_valid_donor_list 參數(shù)控制。由于它是動(dòng)態(tài)參數(shù),您可以在服務(wù)器運(yùn)行時(shí)進(jìn)行更改。使用 show variables 命令將顯示參數(shù)是否具有有效的供體(Master):slave1 [localhost:45009] ((none)) SHOW VARIABLES LIKE 'clone_valid_donor_list';+------------------------+-------+| Variable_name | Value |+------------------------+-------+| clone_valid_donor_list | |+------------------------+-------+1 row in set (0.01 sec)
例子中,我們需要對它進(jìn)行設(shè)置:slave1 [localhost:45009] ((none)) set global clone_valid_donor_list = '127.0.0.1:45008';Query OK, 0 rows affected (0.00 sec)
下一步不是強(qiáng)制性的,但使用默認(rèn)的 log_error_verbosity,錯(cuò)誤日志不會顯示有關(guān)克隆進(jìn)度的大量信息。所以,對于這個(gè)例子,我會將詳細(xì)程度調(diào)整到更高的級別(在供體和受體機(jī)上):mysql set global log_error_verbosity=3;Query OK, 0 rows affected (0.00 sec)
現(xiàn)在,讓我們在受體(Slave)上開始克隆過程:slave1 [localhost:45009] ((none)) CLONE INSTANCE FROM clone_user@127.0.0.1:45008 identified by 'sekret';Query OK, 0 rows affected (38.58 sec)
有兩種辦法。
1、在B機(jī)器上裝mysql。
將A機(jī)器上的mysql/data下的你的數(shù)據(jù)庫目錄整個(gè)拷貝下來。
將B機(jī)器上的mysql服務(wù)停止。
找到B機(jī)器上的mysql/data目錄,將你拷貝的目錄粘貼進(jìn)去,然后啟動(dòng)mysql服務(wù)就可以了。
2、使用SQL語句備份和恢復(fù)
你可以使用SELECT INTO OUTFILE語句備份數(shù)據(jù),并用LOAD DATA INFILE語句恢復(fù)數(shù)據(jù)。這種方法只能導(dǎo)出數(shù)據(jù)的內(nèi)容,不包括表的結(jié)構(gòu),如果表的結(jié)構(gòu)文件損壞,你必須要先恢復(fù)原來的表的結(jié)構(gòu)。
語法:
SELECT * INTO {OUTFILE | DUMPFILE} ’file_name’ FROM tbl_name
LOAD DATA [LOW_PRIORITY] [LOCAL] INFILE ’file_name.txt’ [REPLACE | IGNORE]
INTO TABLE tbl_name
SELECT ... INTO OUTFILE ’file_name’
在dos命令提示符下使用mysqldump命令進(jìn)行備份.
如下:
C:\Documents and Settings\Administratormysqldump yinshi c:\\backup.txt -uroot
-p12142022
mysql拷貝表操作我們會常常用到,下面就為您詳細(xì)介紹幾種mysql拷貝表的方式,希望對您學(xué)習(xí)mysql拷貝表方面能夠有所幫助。
假如我們有以下這樣一個(gè)表:
id username password
-----------------------------------
1 admin *************
2 sameer *************
3 stewart *************
CREATE TABLE IF NOT EXISTS `admin` ( `id` int(6) unsigned NOT NULL auto_increment, `username` varchar(50) NOT NULL default '', `password` varchar(100) default NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ;
1. 下面這個(gè)語句會拷貝表結(jié)構(gòu)到新表newadmin中。 (不會拷貝表中的數(shù)據(jù))
CREATE TABLE newadmin LIKE admin
2. 下面這個(gè)語句會拷貝數(shù)據(jù)到新表中。 注意:這個(gè)語句其實(shí)只是把select語句的結(jié)果建一個(gè)表。所以newadmin這個(gè)表不會有主鍵,索引。
CREATE TABLE newadmin AS ( SELECT * FROM admin )
3. 如果你要真正的復(fù)制一個(gè)表。可以用下面的語句。
CREATE TABLE newadmin LIKE admin; INSERT INTO newadmin SELECT * FROM admin;
4. 我們可以操作不同的數(shù)據(jù)庫。
CREATE TABLE newadmin LIKE shop.admin; CREATE TABLE newshop.newadmin LIKE shop.admin;
5. 我們也可以拷貝一個(gè)表中其中的一些字段。
CREATE TABLE newadmin AS ( SELECT username, password FROM admin )
6. 我們也可以講新建的表的字段改名。
CREATE TABLE newadmin AS ( SELECT id, username AS uname, password AS pass FROM admin )
7. 我們也可以拷貝一部分?jǐn)?shù)據(jù)。
CREATE TABLE newadmin AS ( SELECT * FROM admin WHERE LEFT(username,1) = 's' )
8. 我們也可以在創(chuàng)建表的同時(shí)定義表中的字段信息。