Jus*_*ner 6 mysql innodb myisam replication mysqldump
我有一个主数据库,其中已经有一些数据。master 数据库中的表包括 MyISAM 和 InnoDB 引擎。现在我想使用mysqldump来转储我的从 MySQL 服务器的初始数据。我应该传递给 mysqldump 的参数是什么?目前我使用的是下面列出的。
mysqldump --host=localhost --user=root --password=pa4word --single-transaction --lock-all-tables --master-data=1 mydb > result.sql
Run Code Online (Sandbox Code Playgroud)
这个命令可以吗?我不知道这是否适合我的环境(MyISAM 和 InnoDB 引擎表在一个数据库中)。
谢谢,
如果您要转储混合了 InnoDB 和 MyISAM 的 mysql 数据库,并且您已安排停机时间:
mysqldump -u... -p... --master-data=1 --single-transaction --flush-privileges --routines --triggers --all-databases > /root/mydata.sql
Run Code Online (Sandbox Code Playgroud)
由于 --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}"
Run Code Online (Sandbox Code Playgroud)
这样做更好的原因是--single-transaction
不能保护 MyISAM 在转储期间不会发生变化。
在启动 mysqldump 之前,请确保在 master 上启用了二进制日志记录。如果不是,请执行以下操作:
步骤 01) 将此添加到主服务器上的 /etc/my.cnf
[mysqld]
log-bin=mysql-bin
Run Code Online (Sandbox Code Playgroud)
步骤 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;
Run Code Online (Sandbox Code Playgroud)
确保 master 中存在 rep_username。如果没有,请在主服务器上运行此命令:
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT
ON *.* TO 'whatever_username'@'%' IDENTIFIED BY 'whatever_password';
Run Code Online (Sandbox Code Playgroud)
然后执行mysqldump 到/root/mydata.sql。
将 /root/mydata.sql 从 master 移动到 slave。
接下来,在mysql客户端在slave上执行这条命令:
source /root/mydata.sql
Run Code Online (Sandbox Code Playgroud)
这将在从站中加载 mysqldump 并在 /var/lib/mysql/master.info 中设置正确的日志文件和日志位置。
最后,START SLAVE;
在从服务器上运行,mysql 复制应该开始了。
运行SHOW SLAVE STATUS\G
以检查复制状态。
试一试 !!!
归档时间: |
|
查看次数: |
19537 次 |
最近记录: |