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