我有一个 Ubuntu 10.04 生产 MySQL 数据库服务器,其中数据库的总大小为 260 GB,而根分区的大小本身为 300 GB,其中存储了 DB,基本上意味着大约 96% 的 / 已满并且没有剩余空间用于存储转储/备份等等。截至目前,没有其他磁盘连接到服务器。
我的任务是将此数据库迁移到位于不同数据中心的其他服务器。问题是如何以最少的停机时间有效地做到这一点?
我在想:
您有什么建议可以改进此任务或任何其他更好的方法来完成此任务?
如果你正在考虑迁移到另一个数据库服务器使用完全相同的MySQL版本,你可能希望rsync
在datadir
从旧服务器到新的服务器。
无论 InnoDB 文件布局如何,甚至 MyISAM 表是否存在,这都将起作用。
RESET MASTER;
以清除 rsycn 进程之前的所有二进制日志。如果未启用二进制日志,则可以跳过此步骤。SET GLOBAL innodb_max_dirty_pages_pct = 0;
从 mysql运行大约 10 分钟(这会从 InnoDB 缓冲池中清除脏页。它还有助于更快地执行 mysql 关闭)如果您的数据库都是 MyISAM,则可以跳过此步骤。service mysql stop
在服务器 A 上service mysql start
服务器B上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
Run Code Online (Sandbox Code Playgroud)
DBA FLUSH TABLES WITH READ LOCK;
StackExchange 的一位同事说我应该远离基于 mysqlperformanceblog.com 的一些东西
我通读并了解到在 a 中间针对 InnoDB 表的 SELECTFLUSH TABLES WITH READ LOCK;
仍然允许以某种方式进行写入。正如Arlukin在评论中指出的那样,LVM 可以FLUSH TABLES WITH READ LOCK
在 InnoDB 上正常工作(他的评论为 +1)。
对于所有非 LVM 用户,您可以使用全 MyISAM 数据库与FLUSH TABLES WITH READ LOCK;
. 对于 InnoDB,请坚持--single-tranaction
在 mysqldumps 中使用。
归档时间: |
|
查看次数: |
7368 次 |
最近记录: |