sql >> データベース >  >> RDS >> Mysql

MySQLデータベースを別のサーバーに複製する方法

    MySQLレプリケーションを使用すると、あるサーバーから別のサーバーにデータベースを簡単にコピーできます。 MySQLは、マスタースレーブ、マスターマスター、グループレプリケーションなどのさまざまな種類のレプリケーションをサポートしています。 MariaDBは、マルチマスターレプリケーションもサポートしています。この記事では、MySQLでのマスタースレーブレプリケーションを確認し、LinuxでMySQLデータベースをレプリケートする方法を学習します。これらの手順を使用して、Ubuntu、Debian、CentOS、Fedora、Red Hat、およびその他のタイプのLinuxでMySQLデータベースを複製できます。


    MySQLデータベースを複製する方法

    MySQLデータベースを複製する手順は次のとおりです。セットアップには、マスターデータベース(IP – 54.24.32.12)とスレーブデータベース(IP – 45.12.21.23)が必要です。 exampledbという名前のデータベースを複製します マスターからスレーブへ。これらのサーバーの両方にMySQLがインストールされており、両方のサーバーに対するroot権限があることを前提としています。それ以外の場合は、次のコマンドでMySQLをインストールできます

    $ sudo apt-get install mysql-server mysql-client

    ボーナスリード:MySQLWorkbenchの上位の代替案


    1。マスター構成ファイルの編集

    マスターデータベースのサーバーでターミナルを開き、次のコマンドを実行します

    $ sudo vi /etc/mysql/my.cnf

    デフォルトでは、MySQLではリモート接続が無効になっています。レプリケーションのためにスレーブからマスターへのリモート接続を許可する必要があります。したがって、以下に示すように、最初に#を追加して、リモート接続を許可するために次の2行のコメントを解除します

    #skip-networking
    #bind-address=127.0.0.1

    [mysqld]ブロックの次の行を追加またはコメント解除して、次のようにします。

    [mysqld]
    server-id=1
    log-bin = /var/log/mysql/mysql-bin.log
    binlog-do-db=exampledb

    上記の各行を見てみましょう。最初の行のserver-idは、マスターの一意のID番号を指定します。 1から2^32までの正の数である必要があります。

    log-bin MySQLがレプリケーションの詳細を入力するログファイルの場所を指定します。

    binlog-do-db 複製する必要のあるデータベースの名前を示します。

    MySQLサーバーを再起動して変更を適用します

    $ sudo service mysql restart

    rootユーザーとしてMySQLにログインします

    $ sudo mysql -u root -p

    次のコマンドを実行します

    mysql> SHOW MASTER STATUS;
    +------------------+----------+--------------+------------------+
    | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
    +------------------+----------+--------------+------------------+
    | mysql-bin.000001 |      107 |   exampledb  |                  |
    +------------------+----------+--------------+------------------+

    上記の詳細に注意してください。ステップ#3の後半で必要になります。

    ボーナスリード:MySQLでSSL/TLSを有効にする方法


    2。レプリケーションユーザーの作成

    マスターでMySQLサーバーにログインします。

    $ sudo mysql -u root -p

    ルートパスワードの入力を求められます。

    MySQLにログインした後、次のコマンドを実行してリモートユーザーを作成します slave_user 、およびすべてのデータベースのレプリケーション権限を付与します。以下の45.12.21.23をスレーブサーバーのIPに置き換え、$passwordを要件に応じた適切なパスワードに置き換えてください。

    mysql> CREATE USER slave_user@45.12.21.23; 
    mysql> GRANT REPLICATION SLAVE ON *.* TO slave_user@45.12.21.23
           IDENTIFIED BY '$password';
    mysql> FLUSH PRIVILEGES;

    ポート3306のインバウンドファイアウォールルールを追加し、45.12.21.23を許可してください。このリモートユーザーは、レプリケーションを実行するためにマスターデータベースに接続する必要があります。

    ボーナスリード:MySQLのすべてのテーブルの照合を変更する方法


    3。スレーブ構成ファイルの編集

    スレーブデータベースのサーバーでターミナルを開き、次のコマンドを実行します

    $ sudo vi /etc/mysql/my.cnf

    [mysqld]の下に次の行を追加して次のようにします

    [mysqld]
    server-id = 2
    relay-log = /var/log/mysql/mysql-relay-bin.log
    log_bin = /var/log/mysql/mysql-bin.log
    binlog_do_db = exampledb

    最初の行では、サーバーID2をスレーブサーバーに割り当てます。次の数行は、リレーログファイルとレプリケーションログファイルの場所を指定します。最後の行は、複製するデータベースを指定します。

    MySQLサーバーを再起動し、MySQLにログインします

    $ sudo service mysql restart
    $ sudo mysql -u root -p

    次のコマンドを実行して、スレーブに空のデータベースを作成します。

    mysql> CREATE DATABASE exampledb; 
    mysql> USE exampledb;

    マスターデータベースからデータをロードして、スレーブデータベースにデータを入力します

    mysql> LOAD DATA FROM MASTER;

    MySQLを終了します。

    ボーナスリード:フォローするトップデータベースブログ


    4。レプリケーションの初期化

    MySQLにログインしているときに、次のコマンドを実行してレプリケーションプロセスを開始します。 太字の部品を交換してください あなたの価値観で。

    mysql> SLAVE STOP;
    mysql> CHANGE MASTER TO MASTER_HOST='54.24.32.12',
           MASTER_USER='slave_user', 
           MASTER_PASSWORD='<password>', 
           MASTER_LOG_FILE='mysql-bin.000001', 
           MASTER_LOG_POS=107;

    MASTER_HOST –マスターのIPアドレスまたはホスト名(54.24.32.12)。
    MASTER_USER –ステップ2で作成したスレーブユーザー。
    MASTER_PASSWORD –ステップ2で作成したスレーブユーザーのパスワード。
    MASTER_LOG_FILE –実行時にステップ1でMySQLから返されたファイル
    マスターステータスを表示
    MASTER_LOG_POS –ステップ#1でSHOWMASTERSTATUSを実行したときにMySQLが返した位置

    最後に、スレーブを起動してMySQLデータベースのレプリケーションを開始します。

    mysql> START SLAVE;

    この記事がMySQLデータベースの複製に役立つことを願っています。

    1. SQLiteUPSERTと新しいRETURNING句に関するクイック投稿。

    2. DockerComposeでpostgresコンテナのサーバーポートを変更する

    3. MySQL utf8mb4、絵文字を保存するときのエラー

    4. 作成済みのテーブルへのOracleの自動インクリメント