MySQL主从复制

  主从复制:

   通过日志的方式将数据从MySQL主服务器(Master)经过网络传送到MySQL从服务器(Slave)上,然后重放。

  准备:两台主机做MySQL服务器

        172.16.75.1   Master

        172.16.75.2   Slave

  拓扑图:

        QQ截图20181029172603.png

(一)配置:

       Master:

    [root@master ~]# vim /etc/my.cnf   [mysqld]    ....   innodb_file_pertable=ON   skip_name_resolve = ON   log_bin=binlog   server_id=199   sync_binlog=1   innodb_flush_log_at_trx_commit=1

      开启服务:

   [root@master ~]# systemctl start mariadb

     参数解释:

     innodb_file_pertable=ON:将每张表存储在单独的一个表文件中;

     skip_name_resolve = ON :禁止域名解析(第一次建立连接时,IP和host name的映射关系已被缓存);

     log_bin=binlog                :开启二进制日志,日志文件默认存放在/var/lib/mysql目录下(路径可自定义);

     server_id=199                  :数据库服务器的ID ,不同的Mysql服务器ID设置为不同值;

   sync_binlog=1               :一旦二进制日志文件有写入操作时,立即将变化的数据同步到磁盘;

   innodb_flush_log_at_trx_commit=1 :当有事务提交时,数据写入二进制日志文件中,并同步到磁盘;

            

      Slave:

   [root@s  lave ~]# vim /etc/my.cnf   [mysqld]    ...   innodb_file_per_table = ON   skip_name_resolve = ON   server_id=200   read_only=ON   relay_log=slavelog

      开启服务:

   [root@slave ~]# systemctl start mariadb

      参数解释:

       read_only=ON        :只读

       relay_log=slavelog  :开启事务日志,作用:读取并复制保存Master服务器的二进制日志文件;

 (二)将Master的数据内容全备份传送到Slave,保持两台服务器数据一致

        Master:

   [root@master ~]# mysqldump --all-databases --lock-all-tables > alldb.sql   [root@master ~]# scp alldb.sql root@172.16.75.2:/root/

      

       Slave: 将Master端传送来的数据进行重放

   [root@slave ~]# mysql    ...   MariaDB [(none)]> \. alldb.sql

  

  (三)

     Master:

      1. 授权一个用户复制权限并设置密码等;

      2. 查看Master的状态信息即(日志文件和复制的位置)

MariaDB [(none)]> grant replication slave on *.* to 'west'@'172.16.%.%' identified by '111111';Query OK, 0 rows affected (0.00 sec)MariaDB [(none)]> show master status ;+---------------+----------+--------------+------------------+| File      | Position| Binlog_Do_DB|  Binlog_Ignore_DB|+---------------+----------+--------------+------------------+| binlog.000009|    548 |         |          |+---------------+----------+--------------+------------------+1 row in set (0.00 sec)

 

     Slave:指定Master_user, 密码,端口,Master的二进制日志文件,复制开始时Master二进制日志文件的位置(从什么位置开始复制):

MariaDB [(none)]> change master to master_host='172.16.75.1',master_user='west',master_password='111111',master_port=3306,master_log_file='binlog.000009',master_log_pos=548;Query OK, 0 rows affected (0.04 sec)MariaDB [(none)]> start slave; Query OK, 0 rows affected (0.01 sec)

  查看Slave状态:

 图片.png    

  如图可看出Slave正在等待Master发送事件, Slave_IO_Running和Slave_SQL_Running两个线程已开启;

   Slave_IO_Running作用:一旦Master二进制日志文件有变化时,Slave读取Master二进制日志并复制到中继日志中;

   Slave_SQL_Running作用:将中继日志中的内容重放;

  测试:在Master端创建一个数据库,并在Slave端检测,看两端是否一致;

    Master:

  MariaDB [(none)]> create database teachers;

     图片.png

  Slave:

     图片.png

  主从复制完成;