高性能Mysql主从架构的复制

1.复制配置

一、在Master的数据库中创建一个备份账户:每一个slave使用标准的MySQL用户名和密码链接master。进行复制操做的用户会授<br予REPLICATION SLAVE权限。用户名的密码都会存储在文本文件master.info中
命令以下: mysql > GRANT REPLICATION SLAVE,RELOAD,SUPER ON .
TO backup@’10.100.0.200’ <br IDENTIFIED BY ‘1234’;<br 创建一个账户backup,而且只能容许从10.100.0.200这个地址上来登录,密码是1234。
(若是由于mysql版本新旧密码算法不一样,能够设置:set password for 'backup'@'10.100.0.200'=old_password('1234'))
mysql

1.二、拷贝数据
(假如是你彻底新安装mysql主从服务器,这个一步就不须要。由于新安装的master和slave有相同的数据)
关停Master服务器,将Master中的数据拷贝到B服务器中,使得Master和slave中的数据同步,而且确保在所有设置操做结束
前,禁止在Master和slave服务器中进行写操做,使得两数据库中的数据必定要相同!
1.三、配置master
接下来对master进行配置,包括打开二进制日志,指定惟一的servr ID。例如,在配置文件加入以下值:
server-id=1
log-bin=mysql-bin
server-id:为主服务器A的ID值
log-bin:二进制变动日值
重启master,运行SHOW MASTER STATUS,输出以下:
算法

1.四、配置slave
Slave的配置与master相似,你一样须要重启slave的MySQL。以下:
vim /etc/my.cnf log_bin = mysql-bin
server_id = 2
relay_log = mysql-relay-bin
log_slave_updates = 1
read_only = 1

server_id是必须的,并且惟一。slave没有必要开启二进制日志,可是在一些状况下,必须设置,例如,若是slave为其它
slave的master,必须设置bin_log。在这里,咱们开启了二进制日志,并且显示的命名(默认名称为hostname,可是,
若是hostname改变则会出现问题)。
relay_log配置中继日志,log_slave_updates表示slave将复制事件写进本身的二进制日志(后面会看到它的用处)。
有些人开启了slave的二进制日志,却没有设置log_slave_updates,而后查看slave的数据是否改变,这是一种错误的配置
。因此,尽可能使用read_only,它防止改变数据(除了特殊的线程)。可是,read_only并是很实用,特别是那些须要在slave
上建立表的应用。
1.五、启动slave
接下来就是让slave链接master,并开始重作master二进制日志中的事件。你不该该用配置文件进行该操做,而应该使用CHANGE
MASTER TO语句,该语句能够彻底取代对配置文件的修改,并且它能够为slave指定不一样的master,而不须要中止服务器
以下:sql

mysql> CHANGE MASTER TO MASTER_HOST='server1',
-> MASTER_USER='repl',
-> MASTER_PASSWORD='p4ssword',
-> MASTER_LOG_FILE='mysql-bin.000001',
-> MASTER_LOG_POS=0;
shell

MASTER_LOG_POS的值为0,由于它是日志的开始位置。<br>
复制代码

你能够用SHOW SLAVE STATUS语句查看slave的设置是否正确:
mysql> SHOW SLAVE STATUS\G
*************************** 1. row ***************************
Slave_IO_State:
Master_Host: server1
Master_User: repl
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000001
Read_Master_Log_Pos: 4
Relay_Log_File: mysql-relay-bin.000001
Relay_Log_Pos: 4
Relay_Master_Log_File: mysql-bin.000001
Slave_IO_Running: No
Slave_SQL_Running: No
...omitted...
Seconds_Behind_Master: NULL
数据库

Slave_IO_State, Slave_IO_Running, 和Slave_SQL_Running是No
代表slave尚未开始复制过程。日志的位置为4而不是0,这是由于0只是日志文件的开始位置,并非日志位置。实际上,My
SQL知道的第一个事件的位置是4。
vim

为了开始复制,你能够运行:
mysql> START SLAVE;
运行SHOW SLAVE STATUS查看输出结果:
mysql> SHOW SLAVE STATUS\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: server1
Master_User: repl
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000001
Read_Master_Log_Pos: 164
Relay_Log_File: mysql-relay-bin.000001
Relay_Log_Pos: 164
Relay_Master_Log_File: mysql-bin.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
...omitted...
Seconds_Behind_Master: 0
服务器

在这里主要是看:
Slave_IO_Running=Yes
Slave_SQL_Running=Yes
slave的I/O和SQL线程都已经开始运行,并且Seconds_Behind_Master再也不是NULL。日志的位置增长了,意味着一些事件被获
取并执行了。若是你在master上进行修改,你能够在slave上看到各类日志文件的位置的变化,一样,你也能够看到数据库
中数据的变化。
你可查看master和slave上线程的状态。在master上,你能够看到slave的I/O线程建立的链接:
在master上输入show processlist\G;
spa

1.五、添加新slave服务器
假如master已经运行好久了,想对新安装的slave进行数据同步,甚至它没有master的数据。
此时,有几种方法可使slave从另外一个服务开始,例如,从master拷贝数据,从另外一个slave克隆,从最近的备份开始一个sl
ave。Slave与master同步时,须要三样东西:
(1)master的某个时刻的数据快照;
(2)master当前的日志文件、以及生成快照时的字节偏移。这两个值能够叫作日志文件坐标(log file
coordinate),由于它们肯定了一个二进制日志的位置,你能够用SHOW MASTER STATUS命令找到日志文件的坐标;
(3)master的二进制日志文件。
线程

能够经过如下几中方法来克隆一个slave:
日志

(1)冷拷贝(cold copy)

中止master,将master的文件拷贝到slave;而后重启master。缺点很明显。

(2) 热拷贝(warm copy)

若是你仅使用MyISAM表,你可使用mysqlhotcopy拷贝,即便服务器正在运行。

(3) 使用mysqldump

使用mysqldump来获得一个数据快照可分为如下几步: <1>锁表:若是你尚未锁表,你应该对表加锁,防止其它链接修改数据库,不然,你获得的数据能够是不一致的。以下: mysql> FLUSH TABLES WITH READ LOCK; <2>在另外一个链接用mysqldump建立一个你想进行复制的数据库的转储: shell> mysqldump --all-databases --lock-all-tables >dbdump.db <3>对表释放锁。 mysql> UNLOCK TABLES;

相关文章
相关标签/搜索