首页 > 代码库 > mysql Replication(mysql5.7主从复制以及读写分离)

mysql Replication(mysql5.7主从复制以及读写分离)

Replication: 即在多个数据库服务器之间实现数据的自动复制。

策略一:基于binary log file(二进制日志文)件的方法

实现机制:

  1、The master server 数据库所有的 写入、更新 操作都以“事件”的形式记录到bin log file。

  2、The slave servers  从master上读取bin log file的内容,并在 slave server本地执行bin log file中记录的事件。

    slave server会接收 bin log file内容的完整副本,默认执行其中记录的所有事件 [如有特别需要,可配置只执行指定的表、事件]。

    每个slave server 都会持有一份包含bin log file 坐标的记录  [坐标指日志文件在master服务器上的文件名,以及日志文件中的位置]。

  说明:主从复制服务群中,master和每个slave 都要设置唯一的 id,以对mysql instance 进行唯一性标识。

     每一个slave server 必须配置 master server 的 主机名、日志文件坐标等数据同步所需信息!

配置实现:

  1、配置 master server

    1.1关闭mysql service

    1.2在my.ini 配置文件添加配置信息如下:

      [mysqld]

      log-bin=mysql-bin  #开启bin log file选项,并以mysql-bin 为日志文件前缀

      server-id=1      #把 master 服务器id 设为 1

    1.3重启 mysql service 即可

 

  2、获取master server 上 bin log file 坐标

     2.1登录客户端,使用命令 show master status 查看坐标文件信息

      2.1.1如果没有配置master server,返回empty

      2.1.2如果已经配置,要使用 “FLUSH TABLES WITH READ LOCK;” 语句来刷新表(将缓存中的数据全部刷回到数据文件)同时禁止所有的mysql 写入操作,以保证数据的完整性。

        然后调用命令 show master status,将会显示 file name ,position within the file ,BinLog_Do_DB ,BinLog_Ignore_DB四项信息。

      我们将四项信息记录下来,在配置 salve server 的时候,file name 和 position 是必须填写的两项信息。

  

  3、创建主从服务器的连接用户   

      mysql> CREATE USER ‘repl‘@‘%.mydomain.com‘ IDENTIFIED BY ‘slavepass‘;
      mysql> GRANT REPLICATION SLAVE ON *.* TO ‘repl‘@‘%.mydomain.com‘;

 

  4、配置 slave server

    4.1释放读锁

      UNLOCK TABLES;

    4.2在my.ini文件中给slave 配置server-id

      [mysqld]

      server-id=2;

    4.3在slave server上配置  与 master server 进行连接的必要信息      

      mysql> CHANGE MASTER TO
      -> MASTER_HOST=‘master_host_name‘,
      -> MASTER_USER=‘replication_user_name‘,
      -> MASTER_PASSWORD=‘replication_password‘,
      -> MASTER_LOG_FILE=‘recorded_log_file_name‘,
      -> MASTER_LOG_POS=recorded_log_position;

以上配置条件: master 服务器是新建的,是一套空的数据库,不包含用户创建的数据。

如果你的数据库已经存在数据,那么slave 服务器只会同步主从配置之后的新数据。此时,配置步骤需做如下更改:

  前言:如果master server存在数据,我们需要将这些数据拷贝到每一个 slave server上。

  1、 为master server 创建 database snapshot (数据备份)

    1.1使用mysqldump工具创建备份:

      mysqldump --all-databases > dbdump.db

      另外可以使用的可选项如下:

      --master-data     [会在备份文件中自动追加 “CHANGE MASTER TO” 语句以在slave server 上开启复制处理进程,并且不需要给master加锁]

      --ignore-table  [设置不进行备份 数据库的表]

      --databases   [设置要进行备份的数据库]

     1.2使用数据库原始文件进行备份

 

   2、在开始slave replication之前,将master备份数据 导入 slave server

     1.1备份由mysqldump工具生成

        1)通过使用 --skip-slave-start 选项 启动slave server ,以阻止slave开始 replication

        2)import dump file : mysql < dbdump.db

     1.2备份来自于原始文件

    

 

mysql Replication(mysql5.7主从复制以及读写分离)