MySQL 主从
MySQL读写分离技术
一、读写分离(主从复制)
主从复制:当主服务器有写入(insert/update/delete)语句时候,从服务器自动获取
读写分离:insert/update/delete语句操作一台服务器,select操作另一个服务器
![](https://upload-images.jianshu.io/upload_images/12275941-06fb0de50d4637fc.png?imageMogr2/auto-orient/strip|imageView2/2/w/617/format/webp)
从库生成两个线程,一个I/O线程,一个SQL线程;
i/o线程去请求主库 的binlog,并将得到的binlog日志写到relay log(中继日志) 文件中;
主库会生成一个 log dump 线程,用来给从库 i/o线程传binlog;
SQL 线程,会读取relay log文件中的日志,并解析成具体操作,来实现主从的操作一致,而最终数据一致
二、bin-log日志
概念:binlog即二进制日志,它记录了数据库上的所有改变并以二进制的形式保存在磁盘中,它可以用来查看数据库的变更历史、数据库增量备份和恢复、Mysql的复制(主从数据库的复制)。
简单概括:binlog日志就是记录MySQL数据库增/删/改SQL语句
作用:实现主从复制、灾难恢复
1、开启binlog日志
步骤1:打开MySQL配置文件vi /etc/my.cnf并修改
![](https://upload-images.jianshu.io/upload_images/12275941-673acf3f96593349.png?imageMogr2/auto-orient/strip|imageView2/2/w/367/format/webp)
步骤2:重启服务
![](https://upload-images.jianshu.io/upload_images/12275941-c9a4ec4c2fc925a6.png?imageMogr2/auto-orient/strip|imageView2/2/w/698/format/webp)
步骤3:登录MySQL查看bin-log日志是否开启
![](https://upload-images.jianshu.io/upload_images/12275941-743411f8f7bc3078.png?imageMogr2/auto-orient/strip|imageView2/2/w/483/format/webp)
![](https://upload-images.jianshu.io/upload_images/12275941-7e8430fb044aa307.png?imageMogr2/auto-orient/strip|imageView2/2/w/334/format/webp)
2、查看binlog日志里面的内容
列表:show master logs
清空:reset master
刷新:flush logs
查看指定日志:show binlog events in '日志键名'
步骤1:查看列表
![](https://upload-images.jianshu.io/upload_images/12275941-f983c497e7fbc3ab.png?imageMogr2/auto-orient/strip|imageView2/2/w/327/format/webp)
步骤2:刷新(生成一个新文件存储)
![](https://upload-images.jianshu.io/upload_images/12275941-1a7522d4e3937fd0.png?imageMogr2/auto-orient/strip|imageView2/2/w/309/format/webp)
![](https://upload-images.jianshu.io/upload_images/12275941-17ff2359cd69d37f.png?imageMogr2/auto-orient/strip|imageView2/2/w/321/format/webp)
步骤3:创建d1数据库和t1表
create database data1;
use data1;
create table table1 (id int);
步骤4:查看binlog日志中的SQL语句
![](https://upload-images.jianshu.io/upload_images/12275941-6e2c8d3da7e44ef4.png?imageMogr2/auto-orient/strip|imageView2/2/w/697/format/webp)
三、主从复制具体配置步骤
1、配置主服务器
步骤1:修改配置文件,开启binlog日志
步骤2:修改配置文件,设置一个server_id=数字(注:数字必须唯一)
![](https://upload-images.jianshu.io/upload_images/12275941-8d6319ba832c73b0.png?imageMogr2/auto-orient/strip|imageView2/2/w/190/format/webp)
步骤3:重启服务
步骤4:创建用户(目的,让从服务器来复制数据)
create user 'copyer'@'%' IDENTIFIED BY '666666';
grant all on . to 'copyer'@'%';
FLUSH PRIVILEGES;
步骤5:关闭防火墙或开放3306端口
2、配置从服务器
步骤1:修改配置文件,设置一个server-id=数字(注:数字必须唯一)
![](https://upload-images.jianshu.io/upload_images/12275941-61cd5efa31717fbc.png?imageMogr2/auto-orient/strip|imageView2/2/w/167/format/webp)
步骤2:重启服务
步骤3:通过change master 语句指定同步主位置
-> 切换到主服务器并查看当前主服务器信息,通过SQL语句:【show master status】
![](https://upload-images.jianshu.io/upload_images/12275941-2e5dbc57a4cdf503.png?imageMogr2/auto-orient/strip|imageView2/2/w/698/format/webp)
-> 切换到从服务器执行同步语句
change master to
master_host='192.168.142.131',master_user='copyer',master_password="666666",master_log_file='localhost-bin.000013',master_log_pos=839;
![](https://upload-images.jianshu.io/upload_images/12275941-f263d1d2cab7d423.png?imageMogr2/auto-orient/strip|imageView2/2/w/698/format/webp)
步骤4:从服务器开启同步
![](https://upload-images.jianshu.io/upload_images/12275941-38746aa3456c6e61.png?imageMogr2/auto-orient/strip|imageView2/2/w/303/format/webp)
步骤5:从服务器验证
![](https://upload-images.jianshu.io/upload_images/12275941-b73946f81f63dad3.png?imageMogr2/auto-orient/strip|imageView2/2/w/556/format/webp)
注意:
-> 如果出现错误,可以重新登陆MySQL然后重启slave服务尝试。
-> 如果使用的是虚拟机克隆的两个系统,则MySQL是一样的,也会报错’UUIDs’问题,需要删除MySQL数据目录下的auto.cnf然后重启(注:重启后会自动创建一个唯一的uuid),然后重启nysql服务即可。
3、测试
![](https://upload-images.jianshu.io/upload_images/12275941-d6e30a8305f7bb0c.png?imageMogr2/auto-orient/strip|imageView2/2/w/582/format/webp)