MySQL复制的概述、安装、故障、技巧、工具

来源:Asp之家 时间:2011-04-11 08:36:00 

MongoDBRedis这样的NoSQL数据库的复制相比,MySQL复制显得相当复杂!

概述

首先主服务器把数据变化记录到主日志,然后从服务器通过I/O线程读取主服务器上的主日志,并且把它写入到从服务器的中继日志中,接着SQL线程读取中继日志,并且在从服务器上重放,从而实现MySQL复制。具体如下图所示:

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_PASSWORD>';


注:出于安全性和灵活性的考虑,不要把root等具有SUPER权限用户作为复制账号。

然后设置主服务器配置文件(缺省:/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


注:一定要保证主从服务器各自的server_id唯一,避免冲突。

注:如果没有指定log_bin的话,缺省会使用主机名作为名字,如此一来一旦主机名发生改变,就会出问题,所以推荐指定log_bin(从服务器的relay_log存在一样的问题)。

注:sync_binloginnodb_flush_log_at_trx_commitinnodb_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


注:如果用户有SUPER权限,则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会非常慢,此时直接拷贝数据文件能节省不少时间:

在拷贝之前要先锁定数据,然后再获得相关的日志信息(FILE & POSITION):


mysql> FLUSH TABLES WITH READ LOCK;

mysql> SHOW MASTER STATUS;


接下来拷贝数据文件时,如果是MyISAM表类型的话,直接拷贝即可;如果是InnoDB表类型的话,一定要先停止MySQL服务再拷贝,否则拷贝文件可能无法使用。把拷贝的数据文件直接复制到从服务器的数据目录。



标签:MySQL工具,MySQL安装技巧,mysql教程
0
投稿

猜你喜欢

  • LZ77 算法的JS实现

    2010-04-11 22:32:00
  • oracle下一条SQL语句的优化过程(比较详细)

    2010-04-22 16:58:00
  • © 版权符号显示不清楚解决方法

    2008-02-18 14:46:00
  • mysql3升级到mysql5解决乱码心得

    2009-04-20 14:41:00
  • HTML5拿什么取代Flash?

    2010-05-10 20:37:00
  • MySQL数据库中对前端和后台进行系统优化

    2009-01-04 13:39:00
  • 初学ASP编程易犯的一个错误要注意

    2008-11-07 15:08:00
  • dl,dt,dd标签 VS 传统table实现数据列表

    2009-08-02 20:45:00
  • Javascript特效--划过放大的列表

    2008-03-21 12:18:00
  • MySQL中两种快速创建空表的方式的区别

    2008-12-17 14:34:00
  • 什么样的图标更具有可用性

    2007-10-16 17:47:00
  • 用css+Javascript实现扫描线效果图片

    2007-11-08 19:12:00
  • 分析与比较五种MySQL数据库可靠性方案

    2009-07-30 08:25:00
  • js 返回 utf-8 字符编码是多少个字节, 函数 fUtf8BoundCheck

    2010-07-31 18:59:00
  • MySQL 5.0默认100连接数的修改

    2008-11-05 13:34:00
  • 利用ADODB.Stream使用浏览器下载服务器文件

    2008-10-09 12:42:00
  • 关于ASP代码的加密

    2007-10-15 12:30:00
  • 从开发人员角度看IE8的开发新特性

    2010-02-26 10:48:00
  • 实例解析:MySQL 实例管理器识别的命令

    2009-02-23 17:33:00
  • 如何正确显示模式对话框showModalDialog中的中文?

    2010-06-28 18:24:00
  • asp之家 网络编程 m.aspxhome.com