相比MongoDB、redis等NoSQL数据库的复制,mysql的复制相当复杂!
摘要
首先主服务器在主日志中记录数据变化,然后从服务器通过I/O线程读取主服务器上的主日志并写入从服务器的中继日志,然后SQL线程读取中继日志并在从服务器上重放,从而实现MySQL复制。如下图所示:
MySQL复制
整个过程反映在从属服务器上,对应于三组日志信息,可以使用以下命令在从属服务器上查看这些信息:
mysql & gt显示从属状态;
主日志文件& ampRead_Master_Log_Pos:下一次传输的主日志信息。中继_主_日志_文件& ampExec_Master_Log_Pos:下一次执行的主日志信息。
中继日志文件& ampRelay_Log_Pos:下一次执行的中继日志信息。
理解这些日志信息的含义对于故障排除非常重要,这将在后面详细解释。
固定
首先在主服务器上创建一个复制帐户:
mysql & gt在*上授予复制从属服务器。*
TO ' & lt;' SLAVE _ USER & gt'@ ' & lt' SLAVE _ HOST & gt'
由' & lt' SLAVE _ PASSword & gt';
然后设置主服务器配置文件(默认:/etc/my.cnf):
[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
注意:如果没有指定log_bin,默认名称是主机名,一旦主机名被更改,就会出现问题。所以建议指定log_bin(从服务器的relay_log也有同样的问题)。
注意:sync_binlog、innodb_flush_log_at_trx_commit、innodb_support_xa都是出于安全目的而设置的,复制时并不需要。
然后设置从服务器配置文件(默认:/etc/my.cnf):
[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
注意:使用skip_slave_start,除非使用START SLAVE命令,否则复制不会从服务器启动。
注意:设置log_slave_updates让从服务器记录日志有助于在必要时将从服务器切换到主服务器。
下面最重要的步骤是如何克隆主服务器数据的副本:
如果数据库使用MyISAM表类型,可以如下操作:
shell & gtmysqldump-all-databases-master-data = 1 & gt;data.sql
注意:默认情况下,master-data选项打开lock-all-tables并写入CHANGE MASTER TO语句。如果数据库使用InnoDB表类型,您应该使用single-transit:
shell & gtmysqldump-all-databases-single-transaction-master-data = 1 & gt;data.sql
使用数据文件,将其传输到从属服务器并导入:关键词:MySQL
优侠库网站每天提供最新最热门的安卓手机软件、游戏下载、分享热门手游资讯攻略教程、手机软件教程步骤,专注安卓手机游戏软件下载。本文链接:http://www.123down.cn/gonglue/227170.html