天天看点

mysql 主从复制配置全过程简介配置过程

简介

一个服务器上执行过的sql语句在别的服务器上也重复执行一遍,这样只要两个数据库的初态是一样的,那么它们就能一直同步。

当然这种复制和重复都是mysql自动实现的,我们只需要配置即可。 

对于一个mysql服务器, 一般有两个线程来负责复制和被复制。当开启复制之后。 

1. 作为主服务器Master,  会把自己的每一次改动都记录到 二进制日志 Binarylog 中。 (从服务器会负责来读取这个log, 然后在自己那里再执行一遍。) 

2. 作为从服务器Slave, 会用master上的账号登陆到 master上, 读取master的Binarylog,  写入到自己的中继日志 Relaylog, 然后自己的sql线程会负责读取这个中继日志,并执行一遍。  到这里主服务器上的更改就同步到从服务器上了。 

配置过程

服务器信息

示例:

主服务器IP:  192.168.1.221    数据库账号: root/123456     数据库名: healthcare

从服务器IP:  192.168.1.209    数据库账号: root/123456     数据库名: healthcare

主服务器(master)配置

首先要保证从服务器对主服务器数据库的访问,即开启MySQL的远程访问。

修改master的数据库配置文件,默认配置文件在 /etc/my.cnf,打开之后在[mysqld]之后加入以下条目:

# 启用二进制日志 Enable binary log

log_bin = mysql-bin

#服务器唯一ID,默认是1,一般取IP最后一段

server-id = 111

#指定索引文件

log-bin-index=mysql-bin.index

#控制何时将日志写入硬盘,0由操作系统决定;1事务结束时

sync_binlog=1

#bin-log日志文件格式,设置为MIXED可以防止主键重复。

binlog_format=mixed

#需要同步的数据库名  多个库以逗号分隔

binlog-do-db = healthcare

#不需要同步的数据库名

binlog-ignore-db = mysql

binlog-ignore-db = performance_schema

binlog-ignore-db = information_schema

#若涉及及同步函数或者存储过程需要配置,否则主备会产生异常不能同步  

log_bin_trust_function_creators=TRUE

修改my.cnf后重启mysql服务.

#service mysql restart

创建同步账号:

mysql> grant replication slave on *.* to [email protected] identified by '123456';

mysql> flush privileges;

mysql> show master status;

mysql 主从复制配置全过程简介配置过程

记录一下file(文件名)和position(位置).

从服务器(slave)配置

修改slave的数据库配置文件,默认配置文件在 /etc/my.cnf,打开之后在[mysqld]之后加入以下条目:

log-bin=mysql-bin   

server-id=17

relay-log-index = slave-relay-bin.index

relay-log = slave-relay-bin

sync_master_info = 1

sync_relay_log = 1

sync_relay_log_info = 1

配置后重启mysql服务

#service mysql restart

配置连接主库

#mysql -uroot -p123456

mysql>

change master to master_host='172.16.0.10',master_user='slave',master_password='fbtslave20190220', master_log_file='mysql-bin.000003',master_log_pos=120;

开始同步:

mysql> start slave;

查看状态:

mysql> show slave status\G;

mysql 主从复制配置全过程简介配置过程
mysql 主从复制配置全过程简介配置过程

正常状态:

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

如果Slave_IO_Running一直处于连接中,查询原因可以从:网络不通,密码不对,position不对查找.

测试是否同步

这里主要是测试一下主服务器修改一条记录后,看看主从服务器的数据是否已经同步

主服务器:

#mysq -uroot -p123456

Mysql>select id,mobile,real_name from tb_member where id = 9;

从服务器:

#mysq -uroot -p123456

Mysql>select id,mobile,real_name from tb_member where id = 9;

主服务器:

Mysql> update tb_member set real_name = 'demo_456' where id = 9;

Mysql>select id,mobile,real_name from tb_member where id = 9;

从服务器:

Mysql>select id,mobile,real_name from tb_member where id = 9;

继续阅读