mysql innodb myisam 混合,如何将InnoDB和MyISAM混合的MySQL数据库复制到同一台服务器上?...

因为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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值