mysql 知识库程序员

mysql高可用性之主从复制

2018-03-08  本文已影响123人  阿卡摩西

1.主从原理

image.png
从库生成两个线程,一个I/O线程,一个SQL线程;
i/o线程去请求主库 的binlog,并将得到的binlog日志写到relay log(中继日志) 文件中;
主库会生成一个 log dump 线程,用来给从库 i/o线程传binlog;
SQL 线程,会读取relay log文件中的日志,并解析成具体操作,来实现主从的操作一致,而最终数据一致;

2.主从用途
mysql主从复制用途

3.基础配置
环境 Linux centos 7+
A主数据库IP:192.168.111.111;

B从数据库IP:192.168.111.116;

4.配置主数据库A

启动mariadb.service;

1.添加一个同步账户

GRANT FILE ON . TO ‘yezt’@'192.168.111.116' IDENTIFIED BY ‘123456’;

GRANT REPLICATION SLAVE ON . TO ‘yezt’@'192.168.111.116' IDENTIFIED BY ‘123456’;

创建A数据库用户

create user 'yezt'@'%' identidied by '123456';

授权用户

grant all privileges on . to 'yezt'@'%' with grant option

2.添加一个数据库作为同步数据库

create database test;

3.创建一个表结构

create table mytest (username varchar(20),password varchar(20));

4.修改配置文件(/etc/my.cnf)

[mysqld]

server-id=1

log-bin=mysql-bin

binlog-do-db=test #要同步的数据库

5.重启服务

systemctl restart mariadb.service

进入数据库查看server-id;

mariadb>show variables like 'server_id';

image.png

6.用show master status\G命令查看日志情况

image.png

(可以用flush logs 命令来刷新得到最新的mysql-bin.000008文件)

5.设置从数据库B为slave

1.重复A的创建数据库和表结构

3.修改配置文件

Mysql版本从5.1.7以后开始就不支持“master-host”类似的参数;如果配置my.cnf会出现 [ERROR] /usr/local/webserver/mysql/libexec/mysqld: unknown variable 'master-host=192.168.111.111'的错误

所以只需要配置

image.png

之后在数据库执行

mariadb>change master to master_host='192.168.111.111', master_user='yezt', master_password='123456', master_log_file='mysql-bin.000008', master_log_pos=0;

(备注:master_log_file需要和主数据库一致,否则重新到A那flush logs,master_log_pos要设置为了,否则开始位置会出问题)

启动slave

start slave

6.用show slave status\G命令查看日志情况

正常情况如下

image.png

不正常时候last_IO_Error会报错

用生成的账户登录A数据库插入数据

image.png

从数据库得到

image.png

备注:如果从数据无法连接主数据库,尝试先关闭主数据库的防火墙

systemctl stop firewalld.service

上一篇下一篇

猜你喜欢

热点阅读