MySQL - 複製資料庫



在現代,公司依靠資料庫來儲存關鍵資訊,例如金融交易、客戶資料和員工記錄。定期維護資料庫副本非常重要,因為電源浪湧和磁碟崩潰始終可能導致資料丟失。因此,定期備份資料庫對於有效的資料管理至關重要。

在 MySQL 中複製資料庫

在 MySQL 中,複製資料庫包括建立一個現有資料庫的精確副本,包括其架構和資料。這幾乎類似於擁有資料庫的備份。如有必要,務必確保複製後對原始資料庫所做的任何更改也反映在複製的資料庫中。

要建立資料庫副本,SQL Server 提供了 **複製資料庫** 語句。但是,MySQL 中沒有此語句。因此,要建立資料庫副本,我們需要手動將一個數據庫的內容轉儲到另一個數據庫。

複製資料庫涉及以下三個步驟:

  • 首先,我們需要建立一個新資料庫。

  • 然後,我們需要使用 **mysqldump** 匯出原始資料庫。

  • 最後,將匯出的資料匯入新資料庫。

示例

首先,讓我們使用以下查詢在 MySQL 伺服器中建立一個數據庫:

CREATE DATABASE testdb;

我們可以使用 **SHOW DATABASES** 語句驗證資料庫 **testdb** 是否已建立。

SHOW DATABASES;

如下所示,testdb 資料庫已成功建立。

資料庫
information_schema
mysql
performance_schema
testdb

資料庫成功建立後,我們需要使用 USE 語句將當前資料庫更改為 **'testdb'**,以便我們執行的任何操作(例如建立表)都將儲存在此資料庫中。

USE testdb;

現在,讓我們使用 CREATE 查詢建立一個名為 **CUSTOMERS** 的表,如下所示:

CREATE TABLE CUSTOMERS (
   ID INT AUTO_INCREMENT,
   NAME VARCHAR(20) NOT NULL,
   AGE INT NOT NULL,
   ADDRESS CHAR (25),
   SALARY DECIMAL (18, 2),
   PRIMARY KEY (ID)
);

以下查詢將 7 條記錄插入到上面建立的表中:

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY) VALUES 
(1, 'Ramesh', 32, 'Ahmedabad', 2000.00 ),
(2, 'Khilan', 25, 'Delhi', 1500.00 ),
(3, 'Kaushik', 23, 'Kota', 2000.00 ),
(4, 'Chaitali', 25, 'Mumbai', 6500.00 ),
(5, 'Hardik', 27, 'Bhopal', 8500.00 ),
(6, 'Komal', 22, 'Hyderabad', 4500.00 ),
(7, 'Muffy', 24, 'Indore', 10000.00 );

使用以下查詢,我們可以驗證表 CUSTOMERS 是否已在 'testdb' 資料庫中建立:

SHOW TABLES;

表已成功在 testdb 資料庫中建立。

Tables_in_testdb
customers

建立資料庫副本(手動)

如前所述,在 MySQL 中,要建立現有資料庫的副本,我們需要建立一個單獨的資料庫,並將一個數據庫的內容手動轉儲到新建立的資料庫。

以下語句建立一個名為 **testdb_copy** 的資料庫(我們需要將上面建立的 **testdb** 資料庫的內容複製到此資料庫)。

CREATE DATABASE testdb_copy;

一旦我們的源 (testdb) 和目標 (testdb_copy) 資料庫準備就緒,我們需要按照以下步驟手動將資料從一個數據庫複製到另一個數據庫。

**步驟 1** - 開啟 **命令提示符**,瀏覽到 MySQL 伺服器的 bin 資料夾。例如,我們將 MySQL 安裝在 **C:\Program Files** 目錄中,因此以下命令將帶我們到 **bin** 資料夾:

C:\> CD C:\Program Files\MySQL\MySQL Server 8.0\bin

**步驟 2** - 使用 **mysqldump** 工具,我們可以將資料庫物件和資料複製到 **.sql** 檔案中。在這裡,我們將 testdb 資料庫的內容匯出到名為 **"testdb.sql"** 的檔案,該檔案位於“D:\Database_backup”。

**注意** - (>) 運算子用於將資料庫從一個位置匯出到另一個位置。

mysqldump -u root -p testdb > D:\database_backup\testdb.sql

步驟 3 − 將“testdb.sql”檔案的內容匯入目標資料庫(在本例中為“testdb_copy”)。

注意 − (<) 運算子用於將資料庫從一個位置匯入到另一個位置。

mysql -u root -p testdb_copy < D:\database_backup\testdb.sql

驗證

要驗證資料和資料庫物件是否已匯入到 testdb_copy 資料庫中,首先,我們需要使用以下查詢在MySQL 命令列客戶端中使用當前資料庫 −

USE testdb_copy;

如果testdb 的內容已成功複製到testdb_copy中,我們應該能夠在表列表中找到客戶表(該表是先前建立的)。

因此,讓我們使用以下查詢驗證“testdb”資料庫中的資料是否已複製到“testdb_copy”資料庫中 −

SHOW TABLES;

如下所示,所有資料庫物件和資料都已成功複製。

Tables_in_testdb
customers

無需 mysqldump 複製資料庫

如果我們想在不使用 mysqldump 工具的情況下複製資料庫,我們必須手動在目標資料庫中建立每個表,並將當前資料庫中存在的表中的所有資料複製到目標資料庫中。這是一個重複的過程,需要對每個需要複製的表進行。

示例

讓我們使用以下查詢在 MySQL 伺服器中建立一個新資料庫 −

CREATE DATABASE Tutorials;

我們可以使用以下查詢驗證是否建立了資料庫Tutorials

SHOW DATABASES;

如下所示,'Tutorials' 資料庫已成功建立。

資料庫
information_schema
mysql
performance_schema
tutorials

現在,我們將當前資料庫切換到Tutorials,以便我們執行的任何操作(例如建立表)都將儲存在此資料庫中。

USE Tutorials;

切換後,使用以下查詢建立一個名為CUSTOMERS的表 −

CREATE TABLE CUSTOMERS (
   ID INT AUTO_INCREMENT,
   NAME VARCHAR(20) NOT NULL,
   AGE INT NOT NULL,
   ADDRESS CHAR (25),
   SALARY DECIMAL (18, 2),
   PRIMARY KEY (ID)
);

在這裡,我們使用下面的 INSERT INTO 語句將一些記錄插入到表中 −

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY) VALUES 
(1, 'Ramesh', 32, 'Ahmedabad', 2000.00 ),
(2, 'Khilan', 25, 'Delhi', 1500.00 ),
(3, 'Kaushik', 23, 'Kota', 2000.00 ),
(4, 'Chaitali', 25, 'Mumbai', 6500.00 ),
(5, 'Hardik', 27, 'Bhopal', 8500.00 ),
(6, 'Komal', 22, 'Hyderabad', 4500.00 ),
(7, 'Muffy', 24, 'Indore', 10000.00 );

使用以下查詢,讓我們建立一個新的資料庫Tutorials_copy,我們希望將Tutorials資料庫的所有資料物件和資料複製到其中。

CREATE DATABASE Tutorials_copy;

我們可以使用以下查詢驗證是否建立了資料庫Tutorials_copy

SHOW DATABASES;

資料庫已建立。

資料庫
information_schema
mysql
performance_schema
tutorials
tutorials_copy

現在,使用以下查詢將當前資料庫切換到 'tutorials_copy' −

USE Tutorials_copy;

在這裡,我們在 'tutorials_copy' 資料庫中建立一個名為“CUSTOMERS”的空表,其模式與 'Tutorials' 中原始的 'CUSTOMERS' 表相同 −

CREATE TABLE Tutorials_copy.customers LIKE Tutorials.customers;

此查詢將 'Tutorials' 資料庫中原始 'customers' 表中的所有資料插入到 'tutorials_copy' 資料庫中的新 'customers' 表中。

INSERT Tutorials_copy.customers SELECT * FROM Tutorials.customers;

我們可以驗證 'Tutorials' 資料庫中的資料庫物件和資料是否已複製到 'Tutorials_copy' 資料庫中。

SHOW TABLES;

輸出

如下所示,表已成功複製 −

Tables_in_tutorials_copy
customers

讓我們還檢索 'Tutorials_copy' 資料庫中 CUSTOMERS 表的記錄,以驗證記錄是否已複製 −

Select * from CUSTOMERS;

如下所示,'Tutorials_copy' 資料庫中的 CUSTOMERS 表,記錄已成功複製 −

ID 姓名 (NAME) 年齡 (AGE) 地址 (ADDRESS) 薪水 (SALARY)
1 Ramesh 32 Ahmedabad 2000.00
2 Khilan 25 Delhi 1500.00
3 Kaushik 23 Kota 2000.00
4 Chaitali 25 Mumbai 6500.00
5 Hardik 27 Bhopal 8500.00
6 Komal 22 Hyderabad 4500.00
7 Muffy 24 Indore 10000.00
廣告