MySQL 主从同步配置

1.   MySQL 主从同步配置 1.1. 基础信息

数据库主服务器IP:127.0.0.1
数据库从服务器IP:192.168.1.31

1.2. 主服务器配置文件my.ini配置 (master)

[mysqld]
#打开日志(主机需要打开) 表示二进制变更日值
log-bin=mysql-bin
#服务器唯一id
server-id=1
#给从机同步的数据库名称
binlog-do-db=shenxianyun_console
binlog-do-db=shenxianyun_portal
binlog-do-db=test
#自动清理1天前的log文件
expire_logs_days=1

1.3. 重启主MYSQL服务

service mysqld restart

1.4. 主数据库授权同步数据库的用户

授权

GRANT REPLICATION SLAVE ON *.* TO 'user'@'%' IDENTIFIED BY‘password’;

刷新权限

FLUSH PRIVILEGES;

查看主服务状态

 SHOW MASTER STATUS;

 

MySQL 主从同步配置

1.5. 从服务器配置文件my.ini配置(slave)

[mysqld]
#服务器id
server-id=2
#要从主机同步的库
replicate-do-db=shenxianyun_console
replicate-do-db=shenxianyun_portal
replicate-do-db=test

 #配置中继日志(一般可以不用)
#relay_log         = mysql-relay-bin

# slave将复制事件写进自己的二进制日志(后面会看到它的用处)。
#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.6. 重启从MYSQL服务

service mysqld restart

1.7.  启动slave (实现数据同步)

接下来就是让slave连接master,并开始重做master二进制日志中的事件。你不应该用配置文件进行该操作,而应该使用CHANGE MASTER TO语句,该语句可以完全取代对配置文件的修改,而且它可以为slave指定不同的master,而不需要停止服务器。如下:

配置slave服务器用于连接master服务器的参数

 【注意:MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=594是通过前面的主数据库SHOW MASTER STATUS;得到】

CHANGE MASTER TO MASTER_HOST='1.1.1.1',MASTER_USER='root', MASTER_PASSWORD='password',MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=594;

开启SLAVE同步

start slave;

查看下slave状态

show slave status;

 

MySQL 主从同步配置

当Slave_IO_Running和Slave_SQL_Running都为Yes,才说明主从复制成功

slave的I/O和SQL线程都已经开始运行,而且Seconds_Behind_Master不再是NULL。日志的位置增加了,意味着一些事件被获取并执行了。如果你在master上进行修改,你可以在slave上看到各种日志文件的位置的变化,同样,你也可以看到数据库中数据的变化。

你可查看master和slave上线程的状态。在master上,你可以看到slave的I/O线程创建的连接:

在master上输入show processlist\G;

 

MySQL 主从同步配置

 

2为处理slaveI/O线程的连接。

在slave服务器上运行该语句: show processlist;

 

MySQL 主从同步配置

1I/O线程状态,行2SQL线程状态。

 

1.8.  添加新slave服务器

假如master已经运行很久了,想对新安装的slave进行数据同步,甚至它没有master的数据。
此时,有几种方法可以使slave从另一个服务开始,例如,从master拷贝数据,从另一个slave克隆,从最近的备份开始一个slave。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;

 

 

2.         复制的常用拓扑结构

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zyxygz.html