创建新的MYSQL复制
我需要将mysql从主服务器复制到从服务器。(已经试过一次了) 数据库相当大(超过100GB),需要几个小时才能为新的从机做好准备 数据库有MyIsam和innoDB引擎,两者都在编写中 我想我唯一的选择是将数据文件从主设备复制到新的从设备上?(或者进行数据库转储,我稍后将在第二轮主题中引用) 在此之前,我必须运行所有使用数据库和 对表进行写回,还是关闭整个数据库 在数据目录同步到新的复制服务器之后,我启动了它,带有表的数据库就在那里。我通过将bin.log更改为007324并将位置更改为0而摆脱的第一个错误 错误1: 140213 4:52:07[错误]出现致命错误1236:“在从二进制日志读取数据时,无法从主服务器中找到二进制日志索引文件”中的第一个日志文件名 140213 4:52:07[注意]从I/O线程退出,读取到日志“bin log.007323”,位置46774422 之后,我从数据库中得到了新的问题,每个表都出现了这个错误 错误2: 查询时出现错误“文件中的信息不正确:”./database/table.frm“”。默认数据库:“数据库” 好像出了什么事 第二轮! 在这一幕之后,我开始想,这可以不用长时间的服务休息就完成 主数据库已经配置好,可以正常工作到另一个从数据库 所以我做了一些谷歌搜索,这就是我想到的 对表进行读取锁定:创建新的MYSQL复制,mysql,mysqldump,database-replication,Mysql,Mysqldump,Database Replication,我需要将mysql从主服务器复制到从服务器。(已经试过一次了) 数据库相当大(超过100GB),需要几个小时才能为新的从机做好准备 数据库有MyIsam和innoDB引擎,两者都在编写中 我想我唯一的选择是将数据文件从主设备复制到新的从设备上?(或者进行数据库转储,我稍后将在第二轮主题中引用) 在此之前,我必须运行所有使用数据库和 对表进行写回,还是关闭整个数据库 在数据目录同步到新的复制服务器之后,我启动了它,带有表的数据库就在那里。我通过将bin.log更改为007324并将位置更改为0而摆
FLUSH TABLES WITH READ LOCK;
取垃圾场:
mysqldump --skip-lock-tables --single-transaction --flush-logs --master-data=2 -A > dbdump.sql
包装和搬运:
gzip(pigz)从转储中找到MASTER_LOG_文件和MASTER_LOG_POS之后,将dbdump移动到从属服务器
在此之后,我认为我不想导入dbdump.sql,因为它超过100GB,并且
这需要时间。所以,我认为来源将是一个不错的选择
在从属服务器上:
CREATE DATABASE dbdump;
USE dbdump;
SOURCE dbdump.db;
CHANGE MASTER TO MASTER_HOST='x.x.x.x',MASTER_USER='replication',MASTER_PASSWORD='slavepass',
MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=X;
start slave;
SHOW SLAVE STATUS \G
我还没有测试过,我知道什么了吗
--bp意识到发出源命令与从shell中导入转储的SQL是一样的。不管怎样,都需要很长时间。除此之外,您还有正确的步骤-在主服务器上使用读锁刷新表,对主服务器进行数据库转储,确保注意主服务器的binlog坐标,在从服务器上导入转储,设置binlog坐标,开始复制。除非您真的知道自己在做什么,否则不要使用原始二进制文件(尤其是INNODB表)
如果你有很多大的表(也不只是一个大的表),你可以考虑用表(或表组)并行化你的转储/导入来加快进度。实际上有一些工具可以帮助你做到这一点
您可以使用原始二进制文件,但它不适合心脏虚弱的人。在过去,我使用rsync在主程序和从程序之间差异地更新原始二进制文件(在执行此操作之前,您仍然必须使用带读锁的flush table并收集主程序binlog坐标)。对于MyISAM表,这实际上非常有效。对于InnoDB来说,这可能更棘手。我更喜欢使用这个选项来设置InnoDB为每个表写入索引和数据文件。您需要重新同步ibdata*文件。您将从从属服务器中删除ib_logfile*文件 这整件事有点牵强,所以除非你没有其他可行的选择,否则我不会求助于这样做。在考虑尝试二进制文件同步之前,绝对要先进行一次传统的SQL转储,每次都要等到您真正知道自己在做什么