mysql主主同步配置_MySql主主(主从)同步配置详解
MySql主主(主从)同步配置详解
Category : ⼯作学习 / Tags : mysql, 同步 / Date : 2011.05.28 / 2,287 views /
⼀、MySQL复制概述
MySQL⽀持单向、异步复制,复制过程中⼀个服务器充当主服务器,⽽⼀个或多个其它服务器充当从服务器。MySQL复制基于主服务器在⼆进制⽇志中跟踪所有对数据库的更改(更新、删除等等)。因此,要进⾏复制,必须在主服务器上启⽤⼆进制⽇志。每个从服务器从主服务器接收主服务器上已经记录到其⼆进制⽇志的保存的更新。当⼀个从服务器连接主服务器时,它通知主服务器定位到从服务器在⽇志中读取的最后⼀次成功更新的位置。从服务器接收从那时起发⽣的任何更新,并在本机上执⾏相同的更新。然后封锁并等待主服务器通知新的更新。从服务器执⾏备份不会⼲扰主服务器,在备份过程中主服务器可以继续处理更新。
⼆、复制实现细节
MySQL使⽤3个线程来执⾏复制功能,其中两个线程(Sql线程和IO线程)在从服务器,另外⼀个线程(IO线程)在主服务器。当发出START SLAVE时,从服务器创建⼀个I/O线程,以连接主服务器并让它发送记录
在其⼆进制⽇志中的语句。主服务器创建⼀个线程将⼆进制⽇志中的内容发送到从服务器。该线程可以即为主服务器上SHOW PROCESSLIST的输出中的Binlog Dump线程。从服务器I/O线程读取主服务器Binlog Dump线程发送的内容并将该数据拷贝到从服务器数据⽬录中的本地⽂件中,即中继⽇志。第3个线程是SQL线程,由从服务器创建,⽤于读取中继⽇志并执⾏⽇志中包含的更新。在从服务器上,读取和执⾏更新语句被分成两个独⽴的任务。当从服务器启动时,其I/O 线程可以很快地从主服务器索取所有⼆进制⽇志内容,即使SQL线程执⾏更新的远远滞后。
1、复制线程状态
通过show slave status\G和show master status可以查看复制线程状态。常见的线程状态有:
(1)主服务器Binlog Dump线程
Has sent all binlog to slave; waiting for binlog to be updated
线程已经从⼆进制⽇志读取所有主要的更新并已经发送到了从服务器。线程现在正空闲,等待由主服务器上新的更新导致的出现在⼆进制⽇志中的新事件。
(2)从服务器I/O线程状态
Waiting for master to send event
线程已经连接上主服务器,正等待⼆进制⽇志事件到达。如果主服务器正空闲,会持续较长的时间。如果等待持续slave_read_timeout 秒,则发⽣超时。此时,线程认为连接被中断并企图重新连接。
(3)从服务器SQL线程状态
Reading event from the relay log
线程已经从中继⽇志读取⼀个事件,可以对事件进⾏处理了。
Has read all relay log; waiting for the slave I/O thread to update it
线程已经处理了中继⽇志⽂件中的所有事件,现在正等待I/O线程将新事件写⼊中继⽇志。
2、复制过程中使⽤的传递和状态⽂件
默认情况,中继⽇志使⽤形式的⽂件名,其中host_name是从服务器主机名,nnnnnn是序列号。中继⽇志与⼆进制⽇志的格式相同,并且可以⽤mysqlbinlog读取。
从服务器在data⽬录中另外创建两个⼩⽂件。这些状态⽂件默认名为主master.info和relay-log.info。状态⽂件保存在硬盘上,从服务器关闭时不会丢失。下次从服务器启动时,读取这些⽂件以确定它已经从主服务器读取了多少⼆进制⽇志,以及处理⾃⼰的中继⽇志的程度。
如果要备份从服务器的数据,还应备份这两个⼩⽂件以及中继⽇志⽂件。它们⽤来在恢复从服务器的数据后继续进⾏复制。如果丢失了中继
三、MySQL建⽴主从服务器配置⽅法
A、环境描述
服务器A(主) 192.168.1.106
服务器B(从) 192.168.1.107
Mysql版本:5.5.11
System OS:CentOS 5.6 X64
主从需同步的数据库内容保持⼀致。
B、主从配置过程
主服务器
a)创建同步⽤户
在主服务器上为从服务器建⽴⼀个连接帐户,该帐户必须授予REPLICAITON SLAVE权限。服务器A:
View Code BASH
1
2
grant replication slave on *.* to 'replication'@'192.168.1.%' identified by '000000'; flush privileges;
b)修改mysql配置⽂件
View Code BASH
1
2
3
4
5
[mysqld]
server-id = 1
log-bin=/data0/mysql/binlog/binlog
binlog-do-db = test
binlog-ignore-db=mysql
c)重启mysql服务
View Code BASH
1
# /data0/mysql/mysql restart
d)、查看主服务器状态
View Code BASH
1
2
3
4
5
6
7
8
9
10
mysql>flush tables with read lock;
mysql>show master status\G
*************************** 1. row ***************************
File: binlog.000006
Position: 107
Binlog_Do_DB: test
Binlog_Ignore_DB: mysql
1 row in set (0.00 sec)
mysql>unlock tables;
注:这⾥锁表的⽬的是为了⽣产环境中不让进新的数据,好让从服务器定位同步位置。初次同步完成后,记得解锁。从服务器
a)修改mysql配置⽂件
View Code BASH
1
[mysqld]
server-id = 2mysql下载后的初次使用
log-bin = /data0/mysql/binlog/binlog
replicate-do-db = test
replicate-ignore-db = mysql,information_schema
b)重启mysql服务
View Code BASH
1
2
3
4
5
# /data0/mysql/mysql restart
c)⽤change master语句指定同步位置
View Code BASH
1
mysql>change master to master_host='192.168.1.106', master_user='replication', master_password='000000', master_log_file='binlog.000006', master_log_pos=107;
注:master_log_file,master_log_pos由上⾯主服务器查出的状态值中确定。master_log_file对应File,master_log_pos对应Position。
mysql 5.x以上版本已经不⽀持在配置⽂件中指定主服务器相关选项。
d)启动从服务器线程
View Code BASH
1
mysql>start slave;
e)查看从服务器状态
View Code BASH
1
mysql>show slave status\G;
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
查看以上两项的值,均为Yes则表⽰状态正常。
C、测试主从同步
先在主库中插⼊⼀条新的数据
View Code BASH
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
mysql> use test
Database changed
mysql> desc wp_terms;
+------------+---------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+---------------------+------+-----+---------+----------------+
| term_id | bigint(20) unsigned | NO | PRI | NULL | auto_increment | | name | varchar(200) | NO | MUL | | |
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论