MySQL主从复制小结

两台服务器作此实验,信息如下:

IP                                       机器名称                            操作系统版本                            数据库版本

192.168.101.81                  my-master                         Centos7.5_64                            mysql 5.7

192.168.101.82                  my-slave                            Centos7.5_64                            mysql 5.7

一、mysql的经典主从复制

      1、初始化环境(两台机器上都操作)

    a)安装相关的环境包:yum –y install vim wget lrzsz ntpdate

    b)同步时间:ntpdate -u times.aliyun.com

    c)上传mysql80-community-release-el7-1.noarch到服务器上

    d) rpm -ivh mysql80-community-release-el7-1.noarch.rpm

    e) vim /etc/yum.repos.d/mysql-community.repo

    将mysql8.0的enable=1修改为enable=0;然后将将mysql5.7的enable=0修改为enable=1

    f)安装数据库 yum clean all && yum makecache fast  && yum -y install mysql mysql-devel mysql-server

    g)systemctl start mysqld && systemctl enable mysqld

    h)grep password /var/log/mysql.log中找到密码,然后用找到的密码登录数据库: mysql –u root –p   回车后输入初始化安装mysql生成的密码

    i)登录后用alter user ‘root’@ ‘localhost’identified by ‘新密码’;来修改密码

    g)用mysql_secure_installation命令根据提示对数据库做安全,一路回车

      2、在主库my-master上操作如下

          a)修改主机名:hostname my-master && echo ‘my-master’> /etc/hostname  退出后重新登录就可以了

    b)登录数据库(mysql –u root –p新密码)后对从服务器同步用户授权:  grant replication  slave  on *.* to ‘wangtao’@’192.168.101.82’identified by ‘Wangta0+007’;

          c)编辑/etc/my.cnf文件在[mysqld]中加入以下内容

              server-id=81              

              log-bin=mysql-bin       

              binlog-ignore-db=mysql

    d) systemctl restart mysqld

    e)登录数据库(mysql –u root –p新密码)后用’show master status ;’查看信息

image.png

3、在主库my-slave上操作如下:

           a)修改主机名:hostname my-slave && echo ‘my-slave’> /etc/hostname  退出后重新登录就可以了

           b)编辑/etc/my.cnf文件在[mysqld]中加入以下内容

              server-id=82              必须为 1 到 232–1 之间的一个正整数值

              read-only                            只读设置

           c) systemctl restart mysqld

           d) 登录数据库(mysql –u root –p新密码)设置同步

              change master to master_host='192.168.101.81',master_user='wangtao' , master_password=' Wangta0+007',master_log_file='mysql-bin.000003',master_log_pos=106;

        start slave;

           e)查看同步状态

              show slave status \G;  当Slave_IO_Running: Yes 与Slave_SQL_Running: Yes  说明同步成功

      4、插入测试数据测试(略)

二、mysql的gtid主从复制

      1、初始化环境(两台机器上都操作)

    a)安装相关的环境包:yum –y install vim wget lrzsz ntpdate

    b)同步时间:ntpdate -u times.aliyun.com

    c)上传mysql80-community-release-el7-1.noarch到服务器上

    d) rpm -ivh mysql80-community-release-el7-1.noarch.rpm

    e) vim /etc/yum.repos.d/mysql-community.repo

将mysql8.0的enable=1修改为enable=0;然后将将mysql5.7的enable=0修改为enable=1

    f)安装数据库 yum clean all && yum makecache fast  && yum -y install mysql mysql-devel mysql-server

    g)systemctl start mysqld && systemctl enable mysqld

    h)grep password /var/log/mysql.log中找到密码,然后用找到的密码登录数据库: mysql –u root –p   回车后输入初始化安装mysql生成的密码

    i)登录后用alter user ‘root’@ ‘localhost’identified by ‘新密码’;来修改密码

    g)用mysql_secure_installation命令根据提示对数据库做安全,一路回车

      2、在主库my-master上操作如下

          a)修改主机名:hostname my-master && echo ‘my-master’> /etc/hostname  退出后重新登录就可以了

    b)登录数据库(mysql –u root –p新密码)后对从服务器同步用户授权:  grant replication  slave  on *.* to ‘wangtao’@’192.168.101.82’identified by ‘Wangta0+007’;

          c)编辑/etc/my.cnf文件在[mysqld]中加入以下内容

             server-id=81

 gtid-mode=ON

 enforce-gtid-consistency

 log-bin=mysql-bin

 log-slave-updates

 binlog_ignore_db=mysql

    d) systemctl restart mysqld

    e)登录数据库(mysql –u root –p新密码)后用’show master status ;’查看信息

image.png

      3、在主库my-slave上操作如下:

           a)修改主机名:hostname my-slave && echo ‘my-slave’> /etc/hostname  退出后重新登录就可以了

           b)编辑/etc/my.cnf文件在[mysqld]中加入以下内容

              server-id=82

  gtid-mode=ON

  enforce-gtid-consistency

  read-only             只读设置

  log-slave-updates                      

           c) systemctl restart mysqld

           d) 登录数据库(mysql –u root –p新密码)设置同步

              change master to master_host='192.168.101.81',master_user='wangtao' , master_password=' Wangta0+007', master_auto_position=1;

              start slave;

           e)查看同步状态

              show slave status \G;  当Slave_IO_Running: Yes 与Slave_SQL_Running: Yes  说明同步成功

三、GTID与经典主从的区别

1.不用手动定位pos和binlog的位置,添加参数master_auto_position=1即可 

2.多线程并发复制,Slave-parallel-workers=0,1,2(禁用,单线程,两个线程)

master数据库有改动,比如DML,存入bin-log中,

备份到主数据库中,网络I/O才去master给slave去取数据

所以经典模式下一般手动设置给slave备份,因为一定要保证主被数据一样,自动容易出问题。

推荐使用mysql5.7

       下篇博文引入mariadb gelare cluster同步,请大家多多指教!