个人博客:https://suveng.github.io/blog/

MySQL读写分离

MySQL主从复制实战_主从复制

分布式集群带来高并发,高容量的特性,但是数据一致性就成了问题

主要解决两个问题

1. 应用层控制数据源

2. 数据源之间的数据同步

多数据源

  1. 先停止mysql服务

  2. 把MySQL server整个目录拷过来,放到其他目录,修改my.ini

  3. 去到复制的那个目录的bin下,执行mysql初始化, ​​mysqld -initialize -insecure -user=mysql​

  4. 安装服务,mysqld -install mysql3307

注意:服务的路径应该是复制的那个目录的mysqld,如果不是,可能my.ini配置问题

主从复制实践windows:

假设你什么都没装,那么先从mysql官网下载maysql server 7.7.22

我现在的时间是2018.5.30.请记住版本

安装好mysql,作为主库

如下图所示.但是数据库data文件不是在这里,

MySQL主从复制实战_数据库_02

数据库的存储文件在如下图所示的路径,是隐藏文件夹下的.

MySQL主从复制实战_mysql_03

这些可以从my.ini看到的配置

MySQL主从复制实战_数据库_04

修改主库配置文件my.ini

MySQL主从复制实战_mysql_05

主要修改log-bin这里是主库的log文件的位置.当产生主从复制,其文件就会存储在这个位置,记得如果是多文件夹的话,对应的位置必须要有这个文件夹.否则报错

binlog-do-db=project-manager这里配置的是需要主从复制的数据库,这个也是我的其中一个数据库.如下图所示.

MySQL主从复制实战_主从复制_06

当然也可以配置多个,也可以配置不需要主从的数据库,但是我懒,一般也是这样子配置的,所以不做多余的说明,如果想深入了解.请看这篇https://segmentfault.com/a/1190000009922696

到这里主库配置完毕!

复制主库,作为从库

MySQL主从复制实战_mysql_07

把上面的文件夹复制到从库的位置,我这里选择d盘

MySQL主从复制实战_mysql_08

如上图我复制了两个,可以看到我用端口命名.

MySQL主从复制实战_mysql_09

接下来就是修改从库的配置.可以看到3307下面并没有my.ini配置文件,那么就需要自己创建或者去主库那里复制过来.我选择复制过来.需要修改从库的port,basedir,datadir

从英文可以知道他们代表意思,端口,基本路径,数据路径.

MySQL主从复制实战_mysql_10

修改完毕后,就需要配置从库,记住server_id不能和主库的server_id重复

MySQL主从复制实战_主从复制_11

这里最重要的是replicate-do-db=project-manager.

那么到这里从库配置完毕

接下来开始初始化从库

用管理员打开cmd,进入​从库​目录的bin目录下,敲这个指令

​mysqld -initialize -insecure -user=mysql​

这里会生成一些文件到datadir下面的路径,如下图所示

MySQL主从复制实战_数据库_12

圈出来的是生成的,其余那些是后面生成的,还没完成.

还需要吧主库的一些文件给拷过来.把下图的那些文件夹和文件都考过去把,这些文件夹都是一些数据库,每个人的数据库都不一样,只要把文件夹都复制过去就好了,肯定会提示要覆盖ibdata1文件的,直接覆盖就好.不然下面会报错

MySQL主从复制实战_数据库_13

接下来敲这个安装mysql3307服务项

​mysqld -install mysql3307​

安装成功后,启动两个数据库服务.

可以用cmd(管理员),打如下指令

​net start mysql57​​这里的mysql57是我主库的服务项

​net start mysql3307​

启动成功后

到这里从库配置王弼

配置主从库通信

这里就是最后的部分了

用Navicat打开主库,新建查询,执行 ​​show master status​

MySQL主从复制实战_主从复制_14

得到如下的信息,记住file 和position字段

MySQL主从复制实战_数据库_15

打开从库,配置主库的信息,打开从库后,新建查询,执行下面命令

​change master to master_host='127.0.0.1',master_port=3306,master_user='root',master_password='root',master_log_file='master-bin.000003',master_log_pos=154;​

执行成功后,是执行成功后

再执行 ​​start SLAVE​

再执行 ​​show slave status​​查看从库状态

MySQL主从复制实战_数据库_16

如上图所示,哪两个字段的状态必须是yes,否则不成功,看到第一个字段,Waiting for master to send event,则表示成功

最后验证主从复制

MySQL主从复制实战_mysql_17

打开其中一个表插入一条数据

MySQL主从复制实战_mysql_18

提交后从库下面的表也会有插入,保持数据一致性.到这里主从复制完成了.

MySQL主从复制实战_主从复制_19