MySQL主从同步配置

MySQL主从同步配置

为何要作主从同步?

  • 在很是复杂的业务中,常常会碰到有sql须要锁表的场景,致使暂时不能读取数据,那么就影响运行中的业务,而使用主从复制,让主库复制写,从库复制读,这样就算主库出现了锁表的情景,经过读取从库也依然能够保证业务的正常运做。
  • 作数据的热备时很可靠
  • 随着业务量愈来愈大,I/O访问频率太高,单机没法知足,此时作多库的存储,下降磁盘I/O访问的频率,提升单个机器的I/O性能。

主从配置原理?

简单说就是主库开启logbin,从数据库启动的那一刻起将保存全部修改数据库结构或内容的一个文件。mysql主从复制是一个异步的复制过程,主库发送更新事件到从库,从库读取更新记录,并执行更新记录,使得从库的内容与主库保持一致。在主库里,只要有更新事件出现,就会被依次地写入到binlog里面,以后会推到从库中做为从库进行复制的数据源。mysql

配置主从同步

准备工做:sql

  • 12.122.132.22 :3306 主库
  • 12.122.132.23 :3306 从库
  • 数据库版本 5.7+

首先安装好两台mysql,而且启动:shell

systemctl start mysqld; #启动mysql
systemctl stop mysqld;#中止mysql
systemctl reload mysqld; #重启mysql

登陆主库,建立一个用户用于主从复制:数据库

-- 用户名 SimpleWu 密码123456
CREATE USER 'SimpleWu'@'*' IDENTIFIED BY '123456';
-- 执行刷新权限:
flush privileges;

登陆两个数据库同时建立数据库(CORE):安全

CREATE DATABASE CORE;

关闭两个数据库。服务器

修改主库配置文件:异步

[mysqld]
#开启二进制日志
log-bin=mysql-bin
#设置server-id
server-id=1
binlog-do-db = game
binlog-ignore-db = mysql  
binlog-ignore-db = test  
binlog-ignore-db = information_schema

log-bin:设置logbin文件名称,最好不要改动位置。性能

server-id:该id主从之间必须是惟一,惟一的标识。日志

binlog-do-db:指定能够主从同步的数据库,多数据库则配置多行。code

binlog-ignore-db:指定不能够主从同步的数据库,多数据库则配置多行

修改从库配置文件:

#设置server-id,必须惟一
server-id=2

只须要将服务id设置为与主库不一样的ID既可;如今启动两个数据。

启动后须要查看主库log-bin信息

SHOW MASTER STATUS; -- 主库执行

获取到:

+------------------+----------+--------------+----------------------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB                 |
+------------------+----------+--------------+----------------------------------+
| mysql-bin.000012 | 619      | core         | mysql,information_schema,sys     |
+------------------+----------+--------------+----------------------------------+

以目前位置开始主从同步,在从库执行SQL将从库关联主库:

CHANGE MASTER TO
MASTER_HOST='12.122.132.22', -- 主库ip
MASTER_USER='SimpleWu', -- 用户名
MASTER_PORT=3306, -- 端口号
MASTER_PASSWORD='123456', -- 密码
MASTER_LOG_FILE='mysql-bin.000012', -- 开始文件
MASTER_LOG_POS=619; -- 开始位置

执行改SQL后咱们须要查看咱们目前的配置信息:

SHOW SLAVE STATUS; -- 从库执行,查看主从状态

能够看到Slave IO STATE为空表明未链接上,这时候从库启动复制:

START SLAVE; -- 从库执行,启动从库

启动后能够再次查看从库状态,看到Slave IO STATE变成Waiting for master to send event表明主从同步成功。

这个时候在主库建立一张表:

-- 主库执行
CREATE TABLE `TB_USER`(
    ID VARCHAR(55) PRIMARY KEY NOT NULL,
    `NAME` VARCHAR(55) 
);

建立成功后登陆从库,会发下多了一张表,这个时候咱们的主从复制就已经搭建完成了。图就不贴了,贴图不如本身动手体会效果。

启动,关闭从库:

START SLAVE; # 启动从库
STOP SLAVE; # 关闭从库

在修改从库的master配置以前必定要关闭从库,在修改配置信息。

主从同步延迟

在主从同步过程当中由于全部的SQL必须都要在从服务器里面执行一遍,可是主服务器若是不断的有更新操做源源不断的写入, 那么一旦有延迟产生, 那么延迟加剧的可能性就会原来越大。虽然这个问题又不能彻底解决,可是咱们能够采起一些措施来缓解。

咱们知道由于主服务器要负责更新操做, 他对安全性的要求比从服务器高, 全部有些设置能够修改,好比sync_binlog=1,innodb_flush_log_at_trx_commit = 1 之类的设置,而slave则不须要这么高的数据安全,彻底能够讲sync_binlog设置为0或者关闭binlog,innodb_flushlog, innodb_flush_log_at_trx_commit也 能够设置为0来提升sql的执行效率 这个能很大程度上提升效率。另外就是使用比主库更好的硬件设备做为slave。

相关文章
相关标签/搜索