Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
创建新的MYSQL复制_Mysql_Mysqldump_Database Replication - Fatal编程技术网

创建新的MYSQL复制

创建新的MYSQL复制,mysql,mysqldump,database-replication,Mysql,Mysqldump,Database Replication,我需要将mysql从主服务器复制到从服务器。(已经试过一次了) 数据库相当大(超过100GB),需要几个小时才能为新的从机做好准备 数据库有MyIsam和innoDB引擎,两者都在编写中 我想我唯一的选择是将数据文件从主设备复制到新的从设备上?(或者进行数据库转储,我稍后将在第二轮主题中引用) 在此之前,我必须运行所有使用数据库和 对表进行写回,还是关闭整个数据库 在数据目录同步到新的复制服务器之后,我启动了它,带有表的数据库就在那里。我通过将bin.log更改为007324并将位置更改为0而摆

我需要将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“”。默认数据库:“数据库”

好像出了什么事

第二轮! 在这一幕之后,我开始想,这可以不用长时间的服务休息就完成

主数据库已经配置好,可以正常工作到另一个从数据库

所以我做了一些谷歌搜索,这就是我想到的

对表进行读取锁定:

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转储,每次都要等到您真正知道自己在做什么