MYSQL复制及其配置

1746阅读 0评论2012-02-15 啦哆A梦
分类:

目录 []
if (window.showTocToggle) { var tocShowText = "显示"; var tocHideText = "隐藏"; showTocToggle(); } [] 复制介绍

MySQL支持单向、异步复制,复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器。主服务器将更新写入二进制日志文件,并维 护文件的一个索引以跟踪日志循环。这些日志可以记录发送到从服务器的更新。当一个从服务器连接主服务器时,它通知主服务器从服务器在日志中读取的最后一次 成功更新的位置。从服务器接收从那时起发生的任何更新,然后封锁并等待主服务器通知新的更新。

复制有利于健壮性、速度和系统管理:


[] 复制实施细节 [] 复制线程状态描述 [] 复制主线程状态

下面列出了主服务器的Binlog Dump线程的State列的最常见的状态。如果你没有在主服务器上看见任何Binlog Dump线程,这说明复制没有在运行—即,目前没有连接任何从服务器。

二进制日志由各种事件组成,一个事件通常为一个更新加一些其它信息。线程已经从二进制日志读取了一个事件并且正将它发送到从服务器。

线程已经读完二进制日志文件并且正打开下一个要发送到从服务器的日志文件。

线程已经从二进制日志读取所有主要的更新并已经发送到了从服务器。线程现在正空闲,等待由主服务器上新的更新导致的出现在二进制日志中的新事件。

线程停止时发生的一个很简单的状态。


[] 复制从IO线程状态

下面列出了从服务器的I/O线程的State列的最常见的状态。该状态也出现在Slave_IO_State列,由SHOW SLAVE STATUS显示。

线程正试图连接主服务器。

建立同主服务器之间的连接后立即临时出现的状态。

建立同主服务器之间的连接后立即临时出现的状态。

建立同主服务器之间的连接后立即临时出现的状态。线程向主服务器发送一条请求,索取从请求的二进制日志文件名和位置开始的二进制日志的内容。

如果二进制日志转储请求失败(由于没有连接),线程进入睡眠状态,然后定期尝试重新连接。可以使用--master-connect-retry选项指定重试之间的间隔。

线程正尝试重新连接主服务器。

线程已经连接上主服务器,正等待二进制日志事件到达。如果主服务器正空闲,会持续较长的时间。如果等待持续slave_read_timeout秒,则发生超时。此时,线程认为连接被中断并企图重新连接。

线程已经读取一个事件,正将它复制到中继日志供SQL线程来处理。

读取时(由于没有连接)出现错误。线程企图重新连接前将睡眠master-connect-retry秒。

线程正尝试重新连接主服务器。当连接重新建立后,状态变为Waiting for master to send event。

正使用一个非零relay_log_space_limit值,中继日志已经增长到其组合大小超过该值。I/O线程正等待直到SQL线程处理中继日志内容并删除部分中继日志文件来释放足够的空间。

线程停止时发生的一个很简单的状态。


[] 复制从SQL线程状态

下面列出了从服务器的SQL线程的State列的最常见的状态。

线程已经从中继日志读取一个事件,可以对事件进行处理了。

线程已经处理了中继日志文件中的所有事件,现在正等待I/O线程将新事件写入中继日志。

线程停止时发生的一个很简单的状态。

[] MYSQL主从配置实例

通过MYSQL自身的replication实现不同机器上多个数据库的同步。 下面示例是二个互为主从服务结点的配置分案:

[] 硬件环境

NODE 1:

eth0 : 172.16.60.12/255.255.255.0

NODE 2 :

eth0 : 172.16.60.38/255.255.255.0


[] 软件

分别在结点上安装MYSQL服务,注意MYSQL的版本要求一致.


[] 设置MYSQL Replication [] NODE 1配置

mysql>grant replication slave on *.* to 'repl'@'172.16.60.38' identified by '123456';

(授与从结点2登录用户repl数据复制权限,密码为123456)

mysql>flush privileges;(使权限生效)

service mysql stop

[mysqld]
log-bin=mysql-bin #允许二进制更新日志
server-id=1 #服务器的唯一标识,整数介于1~2的32次方之间
binlog-do-db=test #指定做二进制更新日志的数据库,多个数据库需要用多条语句
binlog-ignore-db=mysql #指定不做二进制更新日志的数据库
#如果此服务器只作MASTER,注释掉下面各行
master-host=172.16.60.38 #MASTER服务器地址
master-user=repl #MASTER服务器上用于replicate的用户,必须有replication slave权限
master-password=123456 #MASTER服务器上用于replicate的用户的密码
master-port=3306 #MASTER服务器上TCP端口号
master-connect-retry=60 #如果连接MASTER服务器失败,重试连的间隔,以秒为单位
replicate-do-db=test #指明要复制的数据库
replicate-ignore-db=mysql #指明不做复制的数据库
user = mysql
pid-file = /usr/local/mysql/data/jacky-desktop.pid
socket = /var/run/mysqld/mysqld.sock
port = 3306
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
tmpdir = /tmp
skip-external-locking

service mysql start

[] NODE 2配置

mysql>grant replication slave on *.* to 'repl'@'172.16.60.12' identified by '123456';

(授与从NODE 1登录用户repl数据复制权限,密码为123456)

mysql>flush privileges;

service mysql stop

[mysqld]
server-id=2
#for master
log-bin=mysql-bin
binlog-do-db=test
binlog-ignore-db=mysql
#for slave
master-host=172.16.60.12
master-port=3306
master-user=repl
master-password=123456
master-connect-retry=60
replicate-do-db=test
replicate-ignore-db=mysql
user = mysql
pid-file = /usr/local/mysql/data/jacky-desktop.pid
socket = /var/run/mysqld/mysqld.sock
port = 3306
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
tmpdir = /tmp
skip-external-locking

service mysql start

[] 测试

设置完毕后可以通过命令查看主从状态:

show master status; 查看MASTER状态

show slvae status; 查看SLAVE状态

show processlist; 查看当前进程

stop slave; 暂时停止slave进程

start slave; 开始slave进程

上一篇:Sphinx 在 windows 下安装使用
下一篇:利用mysql-mmm实现mysql高可用