因为mysqldump需要永远,所以我们决定只移动文件.因为2个数据库在同一台服务器上,所以cp会很快.
问题是,从研究来看,MyISAM可以完全移动,但InnoDB不是.
最后一个问题是,有没有办法立即移动整个数据库,并确保InnoDB和MyISAM表都很好.
有任何想法吗?非常感谢!
解决方法:
在你放弃mysqldump之前,你有没有考虑过执行并行的mysqldumps?
回到你的问题,只要目标数据库服务器具有源数据库服务器具有的完全相同的MySQL版本,你就可以使用实时服务器的rsync.
只需在主服务器上对/ var / lib / mysql运行rsync,然后将其复制到目标服务器上的/ var / lib / mysql.当然,我会多次运行rsync.在最终的rsync之前,你应该使用READ LOCK运行FLUSH TABLES.在复制之前,请确保软管所有二进制日志并从头开始.
如果您希望目标服务器具有二进制日志记录,请在/etc/my.cnf中使用以下内容:
[mysqld]
log-bin=mysql-bin
如果您不想在主服务器上关闭MySQL,请尝试运行此脚本:
RSYNCSTOTRY=10
cd /var/lib/mysql
X=0
while [ ${X} -lt ${RSYNCSTOTRY} ]
do
X=`echo ${X}+1|bc`
rsync -r * slaveserver:/var/lib/mysql/.
sleep 60
done
mysql -u... -p... -e"FLUSH TABLES WITH READ LOCK; SELECT SLEEP(86400);"
sleep 60
SLEEPID=`mysql -u... -p... -e"SHOW PROCESSLIST;" | grep "SELECT SLEEP(86400)" | awk '{print $1}'`
rsync -r * slaveserver:/var/lib/mysql/.
mysql -u... -p... -e"KILL ${SLEEPID};"
在执行此操作时缓存的数据和索引页面方面我更保守一些.就个人而言,我更喜欢在几个rsyncs而不是FLUSH TABLES WITH READ LOCK之后关闭mysql.此脚本的另一个替代方法是以下脚本关闭最终rsync的mysql:
mysql -u... -p... -e"RESET MASTER;"
RSYNCSTOTRY=10
cd /var/lib/mysql
X=0
while [ ${X} -lt ${RSYNCSTOTRY} ]
do
X=`echo ${X}+1|bc`
rsync -r * slaveserver:/var/lib/mysql/.
sleep 60
done
service mysql stop
rsync -r * slaveserver:/var/lib/mysql/.
service mysql start
试试看 !!!
警告
如果您有任何InnoDB数据,则应在尝试rsync之前约1小时进行设置:
SET GLOBAL innodb_max_dirty_pages_pct = 0;
这将导致InnoDB更快地从InnoDB缓冲池中分页出未提交的数据.在MySQL 5.5中,不再需要这样做.
标签:mysql,mysqldump,innodb,myisam
来源: https://codeday.me/bug/20190806/1594669.html