將一個(gè)MySQL數(shù)據(jù)庫(kù)的數(shù)據(jù)同步到另一個(gè)MySQL數(shù)據(jù)庫(kù),可以通過(guò)多種方法實(shí)現(xiàn)。以下是幾種常見(jiàn)的方法:
mysqldump
工具導(dǎo)出數(shù)據(jù):
使用 mysqldump
命令導(dǎo)出源數(shù)據(jù)庫(kù)的數(shù)據(jù)。假設(shè)源數(shù)據(jù)庫(kù)為 source_db
,目標(biāo)數(shù)據(jù)庫(kù)為 target_db
,并且你想導(dǎo)出 table1
表的數(shù)據(jù):
mysqldump -u username -p source_db table1 > table1.sql
其中 -u
是用戶(hù)名,-p
表示密碼提示。
導(dǎo)入數(shù)據(jù):
使用 mysql
命令將導(dǎo)出的數(shù)據(jù)導(dǎo)入到目標(biāo)數(shù)據(jù)庫(kù):
mysql -u username -p target_db < table1.sql
同樣,-u
是用戶(hù)名,-p
表示密碼提示。
mysqlpump
工具mysqlpump
是MySQL 5.7.12及更高版本中引入的一個(gè)并行數(shù)據(jù)導(dǎo)入工具,可以用于快速導(dǎo)入數(shù)據(jù):
mysqlpump -u username -p source_db table1 > table1.sql
mysql -u username -p target_db < table1.sql
Replication
MySQL支持主從復(fù)制(Master-Slave Replication),可以將一個(gè)數(shù)據(jù)庫(kù)的數(shù)據(jù)實(shí)時(shí)同步到另一個(gè)數(shù)據(jù)庫(kù)。
配置主數(shù)據(jù)庫(kù):
編輯主數(shù)據(jù)庫(kù)的配置文件(通常是 my.cnf
或 my.ini
):
[mysqld]
server-id=1
log_bin=/var/log/mysql/mysql-bin.log
binlog_do_db=source_db
重啟MySQL服務(wù)以應(yīng)用更改。
配置從數(shù)據(jù)庫(kù): 編輯從數(shù)據(jù)庫(kù)的配置文件:
[mysqld]
server-id=2
relay_log=/var/log/mysql/mysql-relay-bin.log
log_slave_updates=1
read_only=1
重啟MySQL服務(wù)以應(yīng)用更改。
設(shè)置主數(shù)據(jù)庫(kù)的權(quán)限: 在主數(shù)據(jù)庫(kù)上創(chuàng)建一個(gè)用于復(fù)制的用戶(hù):
CREATE USER 'repl'@'%' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
FLUSH PRIVILEGES;
獲取主數(shù)據(jù)庫(kù)的二進(jìn)制日志坐標(biāo): 在主數(shù)據(jù)庫(kù)上執(zhí)行以下命令獲取當(dāng)前的二進(jìn)制日志坐標(biāo):
SHOW MASTER STATUS;
記下 File
和 Position
的值。
配置從數(shù)據(jù)庫(kù)連接主數(shù)據(jù)庫(kù): 在從數(shù)據(jù)庫(kù)上執(zhí)行以下命令,使用獲取的二進(jìn)制日志坐標(biāo):
CHANGE MASTER TO
MASTER_HOST='master_host_ip',
MASTER_USER='repl',
MASTER_PASSWORD='password',
MASTER_LOG_FILE='recorded_file_name',
MASTER_LOG_POS=recorded_position;
START SLAVE;
Federated
存儲(chǔ)引擎如果源數(shù)據(jù)庫(kù)和目標(biāo)數(shù)據(jù)庫(kù)不在同一個(gè)服務(wù)器上,可以使用 FEDERATED
存儲(chǔ)引擎來(lái)創(chuàng)建一個(gè)虛擬表,該表引用遠(yuǎn)程數(shù)據(jù)庫(kù)中的表。
CREATE TABLE target_db.table1 (
id INT AUTO_INCREMENT,
name VARCHAR(255),
PRIMARY KEY (id)
) ENGINE=FEDERATED CONNECTION='mysql://username:password@source_db_host/source_db/table1';
通過(guò)以上方法,你可以將一個(gè)MySQL數(shù)據(jù)庫(kù)的數(shù)據(jù)同步到另一個(gè)MySQL數(shù)據(jù)庫(kù)。選擇哪種方法取決于你的具體需求和環(huán)境。