web-dev-qa-db-ja.com

mysqldumpを使用してMySQLスレーブをセットアップし、初期データを取得する

私はすでにいくつかのデータを持っているマスターデータベースを持っています。 masterデータベースのテーブルには、MyISAMエンジンとInnoDBエンジンの両方が含まれています。 mysqldumpを使用してスレーブMySQLサーバーの初期データをダンプします。 mysqldumpに渡す必要のあるパラメータは何ですか?現在使用しているものを以下に示します。

mysqldump --Host=localhost --user=root --password=pa4Word --single-transaction --lock-all-tables --master-data=1 mydb > result.sql

このコマンドでよろしいですか?これが私の環境に適しているかどうかはわかりません(1つのデータベース内のMyISAMおよびInnoDBエンジンテーブルの両方)。

おかげで、

6
Just a learner

InnoDBとMyISAMが混在するmysqlデータベースをダンプしていて、ダウンタイムをスケジュールしている場合:

mysqldump -u... -p... --master-data=1 --single-transaction --flush-privileges --routines --triggers --all-databases > /root/mydata.sql

--optはデフォルトで有効になっているため、次のオプションはすでに有効になっています

  • --add-drop-table
  • --add-locks
  • --create-options
  • --quick
  • --lock-tables
  • --set-charset
  • --disable-keys

MysqldumpでInnoDB/MyISAMを一緒に使用することに懸念があり、データベースを読み取り専用状態にしたい場合は、すべてのテーブルに手動で読み取りロックを設定してみてください。

MYSQL_CONN="-hhostip -uusername -ppassword"
mysql ${MYSQL_CONN} -A -e"FLUSH TABLES WITH READ LOCK; SELECT SLEEP(86400)" &
SEARCHING_FOR_SLEEP=0
while [ ${SEARCHING_FOR_SLEEP} -eq 0 ]
do
    sleep 3
    SEARCHING_FOR_SLEEP=`${MYSQL} ${MYSQL_CONN} -A -e"SHOW PROCESSLIST;" | grep -c "SELECT SLEEP(86400)"`
done
sleep 1
SLEEP_ID=`mysql ${MYSQL_CONN} -A -e"SHOW PROCESSLIST;" | grep "SELECT SLEEP(86400)" | awk '{print $1}'`

mysqldump ${MYSQL_CONN} --master-data=2 --single-transaction --flush-privileges --routines --triggers --all-databases > /root/mydata.sql

mysql ${MYSQL_CONN} -A -e"KILL ${SLEEP_ID}"

これを行う方が良い理由は、--single-transactionがMyISAMをダンプ中の変更から保護しないためです。

Mysqldumpを起動する前に、バイナリロギングがマスターで有効になっていることを確認してください。そうでない場合は、以下を実行します。

ステップ01)これをマスターの/etc/my.cnfに追加します

[mysqld]
log-bin=mysql-bin

ステップ02)service mysql restart

これにより、マスターでバイナリログが有効になります。

新しいスレーブで、次のコマンドを実行できます。

CHANGE MASTER TO
MASTER_Host='IP of the master',
MASTER_PORT=3306,
MASTER_USER='whatever_username',
MASTER_PASSWORD='whatever_password',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=107;

Rep_usernameがマスターに存在することを確認してください。そうでない場合は、マスターで次のコマンドを実行します。

GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT
ON *.* TO 'whatever_username'@'%' IDENTIFIED BY 'whatever_password';

次に、mysqldumpを/root/mydata.sqlに実行します。

/root/mydata.sqlをマスターからスレーブに移動します。

次に、mysqlクライアントでスレーブ上で次のコマンドを実行します。

source /root/mydata.sql

これにより、mysqldumpがスレーブにロードされ、/ var/lib/mysql/master.infoに正しいログファイルとログの位置が設定されます。

最後に、スレーブでSTART SLAVE;を実行すると、mysqlレプリケーションが開始されます。

SHOW SLAVE STATUS\Gを実行して、レプリケーションのステータスを確認します。

試してみる !!!

8
RolandoMySQLDBA

要件によって異なります。mysqldumpには他のオプションもあります。mysqldump-helpそしてそこから選択必要なパラメーター。

あなたが余分な努力をしたくないなら、これは大丈夫です。

私は基本的に使用します

mysqldump -uroot -proot --extended-insert --all-databases --add-drop-database --disable-keys --flush-privileges --quick --routines --triggers > all-databases.sql
1
Abdul Manaf