如果你正在考虑迁移到另一个数据库服务器使用完全相同的MySQL版本,你可能希望rsync
在datadir
从旧服务器到新的服务器。
无论InnoDB文件的布局,甚至MyISAM表的存在,它都将起作用。
- 在ServerA上安装与ServerA相同版本的mysql
- 在ServerA上,运行
RESET MASTER;
以清除rsycn进程之前的所有二进制日志。如果未启用二进制日志记录,则可以跳过此步骤。
- 在ServerA上,
SET GLOBAL innodb_max_dirty_pages_pct = 0;
从mysql 运行大约10分钟(这将从InnoDB缓冲池中清除脏页。它还有助于更快地关闭mysql)如果您的数据库全部是MyISAM,则可以跳过此步骤。
- 将ServerA的/ var / lib / mysql同步到ServerB上的/ var / lib / mysql
- 重复步骤3,直到rsync少于1分钟
service mysql stop
在ServerA上
- 再执行一次rsync
- scp ServerA:/etc/my.cnf到ServerB:/ etc /。
service mysql start
在ServerB上
service mysql start
在ServerA上(可选)
本质上,这就是这样的脚本会想要的
mysql -u... -p... -e"RESET MASTER;"
mysql -u... -p... -e"SET GLOBAL innodb_max_dirty_pages_pct = 0;"
RSYNCSTOTRY=10
cd /var/lib/mysql
X=0
while [ ${X} -lt ${RSYNCSTOTRY} ]
do
X=`echo ${X}+1|bc`
rsync -r * targetserver:/var/lib/mysql/.
sleep 60
done
service mysql stop
rsync -r * targetserver:/var/lib/mysql/.
service mysql start
DBA FLUSH TABLES WITH READ LOCK;
StackExchange的一位同事说,我应该远离基于mysqlperformanceblog.com中的内容
我通读并了解到,对InnoDB表的SELECT FLUSH TABLES WITH READ LOCK;
仍然可以允许以某种方式发生写操作。正如Arlukin的评论中指出的那样,LVM可以FLUSH TABLES WITH READ LOCK
在InnoDB上正常工作(他的评论为+1)。
对于所有非LVM用户,您都可以使用全MyISAM数据库与一起使用FLUSH TABLES WITH READ LOCK;
。对于InnoDB,请坚持--single-tranaction
使用mysqldumps。