mysql数据库主从复制

时间:2022-11-22 19:47:04

准备工作:

  Centos7.

   192.168.96.9 master数据库 ;

   192.168.96.10 slave数据库;

1. master数据库配置
(1)修改mysql的配置文件 vi /etc/my.cnf
    [mysqld]
    datadir=/var/lib/mysql
    socket=/var/lib/mysql/mysql.sock
    user=mysql
    port=3306
    
    server-id=1 #服务器id (主从必须不一样)
    log-bin=mysql-bin #打开日志(主机需要打开),这个mysql-bin也可以自定义,这里也可以加上路径
    #作为主机的配置
    binlog-do-db=test #要给从机同步的库
    #binlog-do-db=
    binlog-ignore-db=mysql #不给从机同步的库(多个写多行)
    binlog-ignore-db=information_schema
    binlog-ignore-db=performance_schema
    binlog-ignore-db=sys
    expire_logs_days=7 #自动清理 7 天前的log文件,可根据需要修改
(2) 重启mysql   service mysqld restart
(3) 进入mysql客户端,查看bin-log日志是否开启

  mysql> show variables like '%log_bin%';

  mysql数据库主从复制

(4)查看master数据库的server_id状态,默认是0;

     mysql> show variables like '%server_id%';

  mysql数据库主从复制

(5)查看master的状态;

  mysql> show master status;

mysql数据库主从复制

(6)master创建一个账号hadoop给slave数据库使用;因为slave到master上去拉取二进制文件的时候其实质也建立了一个jdbc长连接,需要账号密码;

  GRANT REPLICATION SLAVE ON *.* to 'hadoop'@'%' identified by '1328174';

  查看账号是否创建成功;

  mysql> use mysql;

  mysql> select user , authentication_string, host from user;

   mysql数据库主从复制

  到此,master配置完毕!!

 2. slave数据库配置

(1)修改配置文件 vi /etc/my.cnf

    [mysqld]
  datadir=/var/lib/mysql
  socket=/var/lib/mysql/mysql.sock
  user=mysql
  port=3306
  server-id=10 #服务器id (主从必须不一样)
  log-bin=mysql-bin
  binlog-do-db=test
  #加上以下参数可以避免更新不及时SLAVE重启后导致的主从复制出错。
  read_only = 1
  master_info_repository=TABLE
  relay_log_info_repository=TABLE
  #relay_log_recovery=1 #slave禁止写
  #super_read_only=1 #slave禁止写
 (2) 由于master 和 slave两台虚拟机服务器是克隆的同一台主机,所以我们需要修改auto.cnf文件的server-uuid的值,保证master和slave的mysql实例不一样,如同不修改,主从复制会失败的。查看错误日志如下:

mysql数据库主从复制

所以需要修改:vi /var/lib/mysql/auto.cnf

(3)继续配置slave

       stop slave;

  change master to master_host='192.168.96.9',master_user='hadoop',master_password='1328174',
         master_log_file='mysql-bin.000002',master_log_pos=358; 

    ### mysql-bin.000001,639 这两个值是通过 show MASTER status 查询出来的。

      start slave;

  SHOW SLAVE STATUS;

  mysql数据库主从复制

 

    如果这两个都是Yes,说明主从复制基本成功了!!!

 

3. 测试

mysql数据库主从复制mysql数据库主从复制

 

往master服务器的表中插入一条数据:

mysql数据库主从复制

查看slave服务器中表的状况:

mysql数据库主从复制

 

测试成功。