js06金沙官网登录-js06.com-欢迎您

来自 计算机 2020-03-23 10:17 的文章
当前位置: js06金沙官网登录-js06.com-欢迎您 > 计算机 > 正文

MySQL复制的概述、安装、故障、能力、工具(火丁

同MongoDB,Redis那样的NoSQL数据库的复制相比较,MySQL复制显得非凡复杂! 概述 首先主服务器把数据变动记录到主日志,然后从服务器通过I/O线程读取主服务器上的主日志,并且把它写入到从服务器的联网日志中,接着SQL线程读取中继日志,并且在从服务器上海重机厂放,进而达成MySQL复制。具体如下图所示: 整个进度反映到从服务器上,对应三套日志新闻,可在从服务器上用如下命令查看: 复制代码 代码如下: mysql SHOW SLAVE STATUS; Master_Log_File & Read_Master_Log_Pos:下一个传输的主日志音信。 Relay_Master_Log_File & Exec_Master_Log_Pos:下叁个实践的主日志音讯。 Relay_Log_File & Relay_Log_Pos:下叁个实行的过渡日志音信。 精晓那些日记音信的含义对于缓和故障主要,后文子禽详细阐释。 安装 先在主服务器上创制复制账号: 复制代码 代码如下: mysql GRANT REPLICATION SLAVE ON *.* TO 'SLAVE_USER'@'SLAVE_HOST' IDENTIFIED BY 'SLAVE_PASSWOENVISIOND'; 注:出于安全性和灵活性的思索,不要把root等有着SUPE中华V权限客户作为复制账号。然后设置主服务器配置文件:复制代码 代码如下: [mysqld] server_id = 100 log_bin = mysql-bin log_bin_index = mysql-bin.index sync_binlog = 1 innodb_flush_log_at_trx_commit = 1 innodb_support_xa = 1

注:应当要确认保证基本服务器各自的server_id独一,幸免矛盾。

注:如果未有点名log_bin的话,缺省会接纳主机名作为名字,如此一来一旦主机名发生转移,就能够出标题,所以推举钦定log_bin。

注:sync_binlog,innodb_flush_log_at_trx_commit,innodb_support_xa两个接纳都以由于安全目标设置的,不是复制的总得选项。

紧接着设置从服务器配置文件:复制代码 代码如下: [mysqld] server_id = 200 log_bin = mysql-bin log_bin_index = mysql-bin.index relay_log = mysql-relay-bin relay_log_index = mysql-relay-bin.index read_only = 1 skip_slave_start = 1 log_slave_updates = 1 注:假使用户有SUPE讴歌RDX权限,则read_only无效。

注:有了skip_slave_start,除非接收START SLAVE命令,不然从服务器不会开端复制。

注:设置log_slave_updates,让从服务器记录日志,有利于在必要时把从切换到主。

上边最根本的步子是何许克隆一份主服务器的数额:

假设数据库使用的是MyISAM表类型的话,可按如下方式操作:复制代码 代码如下: shell mysqldump --all-databases --master-data=1 data.sql 注:master-data选项缺省会张开lock-all-tables,并写入CHANGE MASTER TO语句。

假诺数据库使用的是InnoDB表类型的话,则应当采用single-transcation:复制代码 代码如下: shell mysqldump --all-databases --single-transaction --master-data=1 data.sql 有了数据文件,传输到从服务器上并导入: 复制代码 代码如下: shell mysql data.sql 要是数据量非常大的话,mysqldump会相当慢,那时候直接拷贝数据文件能省去不知凡几岁月: 在拷贝此前要先锁定数据,然后再一次获得得相关的日记音讯: 复制代码 代码如下: mysql FLUSH TABLES WITH READ LOCK; mysql SHOW MASTELAND STATUS; 接下来拷贝数据文件时,假如是MyISAM表类型的话,直接拷贝就可以;借使是InnoDB表类型的话,一定要先甘休MySQL服务再拷贝,不然拷贝文件也许不可能利用。把拷贝的数据文件直接复制到从服务器的数额目录。 最终还亟需再内定一下日记音讯: 复制代码 代码如下: mysql CHANGE MASTERubicon TO MASTE中华V_HOST='MASTER_HOST', MASTER_USER='SLAVE_USER', MASTER_PASSWORD='SLAVE_PASSWORD', MASTER_LOG_FILE='FILE', MASTER_LOG_POS=POSITION; 注:不要在my.cnf配置文件里设置MASTERubicon_USER和MASTER_PASSWOEnclaveD,因为最终奏效的是CHANGE MASTERAV4 TO生成的master.info文件里的音信。 在主服务器上一向拷贝数据文件即使非常快,但要求锁表也许截止服务,那会潜濡默化线上服务。假如原先早原来就有了从服务器,那么能够用旧的从服务器做母本来克隆新的从服务器: 先在旧的从服务器上查询日志消息: 复制代码 代码如下: mysql SHOW SLAVE STATUS; 大家供给的是中间的Relay_Master_Log_File & Exec_Master_Log_Pos。 然后在旧的从服务器上遵照前面包车型客车点子取得数码,并在新的从服务器上复苏。 接着在新的从服务器上安装日志音讯: 复制代码 代码如下: mysql CHANGE MASTEWrangler TO MASTE牧马人_HOST='MASTER_HOST', MASTER_USER='SLAVE_USER', MASTER_PASSWORD='SLAVE_PASSWORD', MASTER_LOG_FILE='Relay_Master_Log_File', MASTER_LOG_POS=Exec_Master_Log_Pos; 不管用特别格局,最后记得在从服务器上运维复制,并检查工作是不是正规: 复制代码 代码如下: mysql START SLAVE; mysql SHOW SLAVE STATUS; 假若IO线程和SQL线程都展现Yes,就足以感激天神了: Slave_IO_Running 对应:Master_Log_File & Read_Master_Log_Pos Slave_SQL_Running 对应:Relay_Master_Log_File & Exec_Master_Log_Pos 假使显示No,则印证前边有些配置步骤出错,或然对应的日记文件有标题。 故障 难点:主从复制不仅何故截至了,小编该咋办? 答案:复制错误多半是因为日志错误引起的,所以率先要搞精通是主日志错误还是对接日志错误,从错误音信里经常就能够判定,如若无法得以应用相同上边包车型客车mysqlbinlog命令: 复制代码 代码如下: shell mysqlbinlog MASTEEscort_BINLOG_FILE /dev/null shell mysqlbinlog SLAVE_BINLOG_FILE /dev/null 若无错误,则不会有别的输出,反之如若有乖谬,则会显得出来。 倘诺是主日志错误,则须求在从服务器使用SET GLOBAL sql_slave_skip_counter,如下:复制代码 代码如下: mysql SET GLOBAL sql_slave_skip_counter = 1; mysql START SLAVE; 注:假诺有多少个谬误,恐怕需求实践数十二次。 假若是过渡日志错误,只要在从服务器使用SHOW SLAVE STATUS结果中的日志消息重新CHANGE MASTER TO就能够,系统会抛弃当前的对接日志,重新下载: 复制代码 代码如下: mysql CHANGE MASTEOdyssey TO MASTEGL450_LOG_FILE='Relay_Master_Log_File', MASTER_LOG_POS=Exec_Master_Log_Pos; mysql START SLAVE; 至于为何选取的是Relay_Master_Log_File & Exec_Master_Log_Pos,参见概述。 难点:主服务器宕机了,怎么着把从服务器进步会主服务器? 答案:在一主多从的条件总,需选用数据最新的从服务器做新的主服务器。如下图所示:

升高从服务器为主服务器

在一主两从的意况中,Server1宕机后,等到Server1和Server2把宕机前一同到的日志都试行完,对比Master_Log_File和Read_Master_Log_Pos就能够推断出哪个人快何人慢,因为Server2从 Server1同步的数目比Server3从Server1同步的数据新,所以应当升高Server2为新的主服务器,那么 Server3在CHANGE MASTER TO到Server2的时候理应接受什么的参数呢?1582-1493=89,而Server2的最终的二进制日志位置是8167,所以答案是 8167-89=8078。

技巧

基本服务器中的表能够行使分化的表类型。比方主服务器能够动用InnoDB表类型,提供专业,行锁等高端天性,从服务器能够接纳MyISAM表类型,内部存款和储蓄器消耗少,易备份等优点。还应该有多个事例,一台主服务器若是还要带很七个从服务器来讲,势必会影响其属性,这时得以拿出一台服务器作为从服务器代理,使用BLACKHOLE表类型,只记录日志,不写多少,由它带多台从服务器,进而进级品质。

着力服务器中的表能够运用差异的键类型。譬喻主服务器用InnoDB,键用VARCHA奥迪Q7的话节省空间,从服务器使用MyISAM,键用CHAPRADO进步速度,因为MyISAM有静态表一说。

主导服务器中的表能够运用区别的目录。主服务器主要用于应付写操作,所以除了主键和独一索引等保险数据关系的目录平日都足以不加,从服务器日常用来敷衍读操作,所以能够针对查询特征设置索引,再进一层,分歧的从服务器能够本着不一样的查询设置分裂的目录。

工具

有一部分杰出的工具得以让您的复制工作取得渔人之利的坚决守住,详细内容请参考各自文书档案:

Multi-Master Replication Manager for MySQL

Percona XtraBackup

Maatkit

Tungsten-replicator

其余,Google Project Hosting里还会有大多妙趣横生的花色,可用mysql+replication标签寻找。

证实:本文仿照效法了上边列出的图书中有关的原委:

High Performance MySQL: Optimization, Backups, Replication, and More

MySQL High Availability: Tools for Building Robust Data Centers

本文由js06金沙官网登录-js06.com-欢迎您发布于计算机,转载请注明出处:MySQL复制的概述、安装、故障、能力、工具(火丁

关键词: