mariadb主从同步

MySQL Replication

什么是MySQL Replication

Replication可以实现将数据从一台数据库服务器(master)复制到一或多台数据库服务器(slave)

默认情况下属于异步复制,无需维持长连接

通过配置,可以复制所有的库或者几个库,甚至库中的一些表

是MySQL内建的,本身自带的

Replication的原理

注:简单的说就是master将数据库的改变写入二进制日志,slave同步这些二进制日志,并根据这些二进制日志进行数据操作

Replication的作用

  1. Fail Over 故障切换

  2. Backup Server 备份服务,无法对SQL语句执行产生的故障恢复,有限的备份

  3. High Performance高性能,可以多台slave,实现读写分离

Replication如何工作

整体上来说,复制有3个步骤:

  1. master将改变记录到二进制日志(binary log)中(这些记录叫做二进制日志事件,binary log events);

  2. slave将master的binary log events拷贝到它的中继日志(relay log);

  3. slave重做中继日志中的事件,修改salve上的数据。

 mariadb主从复制中:

  1. master记录二进制日志。在每个事务更新数据完成之前,master在二进制日志记录这些改变。MySQL将事务写入二进制日志,即使事务中的语句都是交叉执行的。在事件写入二进制日志完成后,master通知存储引擎提交事务。

  2. slave将master的binary log拷贝到它自己的中继日志。首先,slave开始一个工作线程——I/O线程。I/O线程在master上打开一个普通的连接,然后开始binlog dump process。Binlog dump process从master的二进制日志中读取事件,如果已经执行完master产生的所有文件,它会睡眠并等待master产生新的事件。I/O线程将这些事件写入中继日志

  3. SQL slave thread(SQL从线程)处理该过程的最后一步。SQL线程从中继日志读取事件,并重新执行其中的事件而更新slave的数据,使其与master中的数据一致。

部署MySQL主从同步

环境准备:

主机名 IP 系统/mariadb版本 角色
db01 172.16.1.51 CentOS7.6/mariadb-5.5 Master
db02 172.16.1.52 CentOS7.6/mariadb-5.5 slave

部署主数据库db01

1. 安装mariadb

1.下载安装软件程序
yum install mariadb-server mariadb -y

2.启动软件服务程序
systemctl start mariadb.service
systemctl enable mariadb.service

3.数据库创建密码登录
mysqladmin -uroot password "123456"
mysql -uroot -p123456

2. 创建需要同步的数据库

MariaDB [(none)]> create database HA;
MariaDB [(none)]> use HA;
MariaDB [HA]> create table test(id int,name varchar(20));   ---建表
MariaDB [HA]> grant replication slave on *.* to slave@172.16.1.52  identified by "123456";   ---创建账号
MariaDB [(none)]> flush privileges;            ---刷新权限表
MariaDB [(none)]> set sql_log_bin=on;          ---同步开启
MariaDB [(none)]> set sql_log_bin=off;         ---不开启
MariaDB [(none)]> show master status;          ---查看状态

3. 导出数据库

mysqldump -uroot -poldboy123  -B HA>ha.sql
拷贝到db02主机
scp  ha.sql 172.16.1.52:/root

4. 修改db01数据库配置文件

  vim  /etc/mysql.conf

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mariadb according to the
# instructions in http://fedoraproject.org/wiki/Systemd

log-bin=mysql-bin-master
server-id=1
binlog-do-db=HA
binlog-ignore-db=mysql

[mysqld_safe]
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid
[root@db01 ~]# ll /var/lib/mysql/ #查看同步信息
-rw-rw---- 1 mysql mysql      320 Nov 23 13:25 mysql-bin-master.000001
systemctl restart  mariadb

log-bin=mysql-bin-master:启用二进制日志

server-id=1:本机数据库ID 标示

binlog-do-db=HA:可以被从服务器复制的库, 二进制需要同步的数据库名

binlog-ignore-db=mysql:不可以被从服务器复制的库

配置从数据库db02

1. 将ha.sql导入数据库

mysql -uroot -p123456 <ha.sql 
mysql -uroot -p123456 -e "show databases"
+--------------------+
| Database           |
+--------------------+
| information_schema |
| HA                 |
| mysql              |
| performance_schema |
| test               |
+--------------------+

2. 修改db02数据库配置文件

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mariadb according to the
# instructions in http://fedoraproject.org/wiki/Systemd
server-id=2
[mysqld_safe]
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid

#
# include all files from the config directory
#
!includedir /etc/my.cnf.d

server-id = 2:从服务器ID号,不要和主ID相同 ,如果设置多个从服务器,每个从服务器必须有一 个唯一的server-id值,必须与主服务器的以及其它从服务器的不相同。可以认为server-id值类似于IP地址:这些ID值能唯一识别复制服务器群集中的每个服务器实例

MariaDB [HA]> stop slave;   ---停止slave
MariaDB [HA]> change master to master_host='172.16.1.51',master_user='slave',master_password='123456';
---告诉从服务器,主服务器是谁。 账号是:slave 密码是:123456
MariaDB [HA]> start slave;  ---开启同步
MariaDB [HA]> show slave status\G   ---查看状态

3. 验证是否同步

  db01数据库上

MariaDB [HA]> select * from test;  ---查看表内容
MariaDB [HA]> insert into test  values (1,'man'); ---插入man 内容
MariaDB [HA]> select * from test;  
+------+------+
| id   | name |
+------+------+
|    1 | man  |
+------+------+

---去db02上面查看 MariaDB [HA]
> select * from test; ok!

 

posted @ 2020-02-24 20:52  kerwin-  阅读(315)  评论(0编辑  收藏  举报