Mysql 主从复制

2018-08-02  本文已影响0人  杰杰微电

主从复制工作原理

Master : 对数据有改变的语句操作(insert,drop,update,delete,create,alter)会写到Binary log 里面

Slave: slave服务器所有的数据都是来源于Master

Slave怎么同步?

I/O thread : 读取主服务器上Binary log (有变化的), 将读过来的二进制内容写到 Relay log 里面

SQL thread: 监测relay log ,从Relay log 里面的语句读出来,处理 replay (重放)操作,在slave 上操作

主从复制二进制日志类型

Binlog_format = statement

每一条修改数据的SQL 语句都会被记录到Master 端的bin-log 中,

slave 端在复制的时候SQL线程会解析成和原来的Master 端执行过的

相同的SQL语句再次执行

优点: 日志记录量少

缺点: 有可能数据不一致 (比如计算时间的函数的SQL语句,拿到从服务器来执行就会造成数据不一致)

Binlog_format = row  (官网推荐)

日志中记录每一行数据被修改的形式,然后在slave 端执行相同的数据修改

优点:避免数据不一致

缺点:日志量急据扩大(比如一次性update 10 万条记录),某些情况下还会使用statement

Binlog_format = mixed

根据具体SQL 语句来选择日志的记录形成

Master 主服务器配置 (MySQL 5.7.10)

vim /etc/my.cnf

[mysqld]

log_bin=master-bin

binlog_format=row

server_id=11

datadir=/var/lib/mysql                     //数据库文件的路径,可根据实际情况修改

socket=/var/lib/mysql/mysql.sock

character_set_server=utf8

max_connections=2000

log_timestamps=SYSTEM

symbolic-links=0

log-error=/var/log/mysqld.log

pid-file=/var/run/mysqld/mysqld.pid

root@WEB-01 mysql]  systemctl restart mysqld

查看初始化是否成功

ls /var/lib/mysql          // 查看目录下面是否有数据库的目录(mysql 目录,sys 目录)生成

如果初始化没成功,rm -rf /var/lib/mysql/*  , 重新初始化。

mysql -uroot -p

mysql>grant replication slave on *.* to 'repuser'@'slaveip' identified by 'Xsjy%123';

mysql>flush privileges;

mysql>select user,host from mysql.user;            //查看授权用户

mysql>show grants for repuser@'slaveip';          //查看授权用户情况

mysql>show master status\G

*******************************************************************************************

从服务器配置

[mysqld]

log_bin=slave-bin

binlog_format=row

relay_log=relay_bin

server_id=12

datadir=/var/lib/mysql

socket=/var/lib/mysql/mysql.sock

character_set_server=utf8

max_connections=2000

log_timestamps=SYSTEM

symbolic-links=0

log-error=/var/log/mysqld.log

pid-file=/var/run/mysqld/mysqld.pid

root@WEB-01 mysql]  systemctl restart mysqld       // 初始化启动从数据库

mysql -u root 登录mysql

// 设定主服务器的相关信息

mysql>change master to master_host='10.25.190.201',master_user='repuser',master_password='Xsjy%123',master_log_file='master-bin.000001',master_log_pos=1048,master_port=3306;

master_host : 主服务IP

master_user:  主服务器允许复制的用户名

master_password: 密码

master_log_file : 当前日志文件的名称  在主服务器上用 show master status\G 查看相关信息

master_log_pos : 当前日志文件的位置

mysql>start slave;

mysql>show slave status\G

查看这两个进程是否yes

Slave_IO_Running: yes

Slave_SQL_Running: yes

上一篇下一篇

猜你喜欢

热点阅读