mysql數(shù)據(jù)如何同步至mysql

小億
81
2024-10-11 12:40:57
欄目: 云計(jì)算

將一個(gè)MySQL數(shù)據(jù)庫(kù)的數(shù)據(jù)同步到另一個(gè)MySQL數(shù)據(jù)庫(kù),可以通過(guò)多種方法實(shí)現(xiàn)。以下是幾種常見(jiàn)的方法:

使用 mysqldump 工具

  1. 導(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 表示密碼提示。

  2. 導(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ù)。

  1. 配置主數(shù)據(jù)庫(kù): 編輯主數(shù)據(jù)庫(kù)的配置文件(通常是 my.cnfmy.ini):

    [mysqld]
    server-id=1
    log_bin=/var/log/mysql/mysql-bin.log
    binlog_do_db=source_db
    

    重啟MySQL服務(wù)以應(yīng)用更改。

  2. 配置從數(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)用更改。

  3. 設(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;
    
  4. 獲取主數(shù)據(jù)庫(kù)的二進(jìn)制日志坐標(biāo): 在主數(shù)據(jù)庫(kù)上執(zhí)行以下命令獲取當(dāng)前的二進(jìn)制日志坐標(biāo):

    SHOW MASTER STATUS;
    

    記下 FilePosition 的值。

  5. 配置從數(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ù)中的表。

  1. 在目標(biāo)數(shù)據(jù)庫(kù)上創(chuàng)建Federated表
    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)境。

0