私はすでにいくつかのデータを持っているマスターデータベースを持っています。 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エンジンテーブルの両方)。
おかげで、
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
を実行して、レプリケーションのステータスを確認します。
試してみる !!!
要件によって異なります。mysqldumpには他のオプションもあります。mysqldump-helpそしてそこから選択必要なパラメーター。
あなたが余分な努力をしたくないなら、これは大丈夫です。
私は基本的に使用します
mysqldump -uroot -proot --extended-insert --all-databases --add-drop-database --disable-keys --flush-privileges --quick --routines --triggers > all-databases.sql