• MySQL高可用主从复制部署



    一 基础环境

    主机名
    系统版本
    MySQL版本
    主机IP
    master
    CentOS 6.8
    MySQL 5.6
    172.24.8.10
    slave01
    CentOS 6.8
    MySQL 5.6
    172.24.8.11

    二 实际部署

    2.1 安装MySQL

    复制代码
      1 [root@Master ~]# yum list installed | grep mysql	#查看是否存在其他MySQL组件
      2 [root@Master ~]# yum -y remove mysql-libs.x86_64	#为避免冲突引发报错,卸载已存在的组件
      3 [root@Master ~]# wget http://repo.mysql.com/mysql-community-release-el6-7.noarch.rpm
      4 [root@Master ~]# rpm -ivh mysql-community-release-el6-7.noarch.rpm
      5 [root@Master ~]# yum install mysql-community-server -y
      6 [root@Master ~]# chkconfig --list | grep mysqld		#查看MySQL是否加入启动项
      7 [root@Master ~]# chkconfig mysqld on
    复制代码
     

    2.2 初始化MySQL

    复制代码
      1 [root@Master ~]# service mysqld start
      2 [root@Master ~]# mysql_secure_installation
      3 [root@Master ~]# service iptables stop
      4 [root@Master ~]# chkconfig iptables off
      5 [root@Master ~]# vi /etc/sysconfig/selinux
      6 SELINUX=disabled
    复制代码
     
    注意:以上操作在Slave主机上也需要执行。

    2.3 master my.cf配置

    复制代码
      1 [root@Master ~]# vi /etc/my.cnf
      2 [mysqld]
      3 ……
      4 server-id=1			#设置主服务器master的id
      5 log-bin=mysql-bin		#配置二进制变更日志命名格式
    复制代码
     
    注意:
    master开启二进制日志后默认记录所有库所有表的操作,可以通过配置来指定只记录指定的数据库甚至指定的表的操作,具体在mysql配置文件的[mysqld]可添加修改如下选项:
    复制代码
      1 # 不同步哪些数据库
      2 binlog-ignore-db = mysql
      3 binlog-ignore-db = test
      4 binlog-ignore-db = information_schema
      5 # 只同步哪些数据库,除此之外,其他不同步
      6 binlog-do-db = mysqltest
    复制代码
     

    2.4 创建账号

    复制代码
      1 [root@Master ~]# mysql -uroot -p
      2 Enter password:
      3 mysql> grant replication slave on *.* to 'repl_user'@'172.24.8.11' identified by 'x12345678';
      4 mysql> flush privileges;
      5 [root@Master ~]# service mysqld restart
      6 [root@Master ~]# mysql -uroot -p
      7 Enter password:
      8 mysql> show master status;
    复制代码
     
    37
    file:mysql-bin.000001
    position:120

    2.5 slave my.cf配置

    复制代码
      1 [root@Master ~]# vi /etc/my.cnf
      2 [mysqld]
      3 server-id=2			#设置从服务器slave的id
      4 log-bin=mysql-bin		#如果此slave是其他slave的master,则此项也必须开启
      5 relay_log=mysql-relay-bin	#配置二进制relay日志命名格式
      6 log_slave_updates=1		#表示slave将复制事件写进自己的二进制日志
      7 read_only=1
    复制代码
     

    2.6 启动slave

    复制代码
      1 [root@Slave01 ~]# service mysqld restart
      2 [root@Slave01 ~]# mysql -uroot -p
      3 Enter password:
      4 mysql> change master to master_host='172.24.8.10',
      5     -> master_user='repl_user',
      6     -> master_password='x12345678',
      7     -> master_log_file='mysql-bin.000001',
      8     -> master_log_pos=120;
      9 mysql> show slave statusG			#查看slave状态
     10 ……
     11 Slave_IO_State:
     12 Master_Host: 172.24.8.10
     13 Master_User: repl_user
     14 Master_Port: 3306
     15 Connect_Retry: 60
     16 Master_Log_File: mysql-bin.000001
     17 Read_Master_Log_Pos: 120
     18 Relay_Log_File: =mysql-relay-bin.000001
     19 Relay_Log_Pos: 4
     20 Relay_Master_Log_File: mysql-bin.000001
     21 Slave_IO_Running: No
     22 Slave_SQL_Running: No
     23 ……
     24 Exec_Master_Log_Pos: 120
     25 Relay_Log_Space: 120
     26 ……
     27 Seconds_Behind_Master: NULL
     28 Master_SSL_Verify_Server_Cert: No
     29 Master_Info_File: /var/lib/mysql/master.info
     30 SQL_Delay: 0
     31 SQL_Remaining_Delay: NULL
     32 Slave_SQL_Running_State:
     33 Master_Retry_Count: 86400
     34 ……
    复制代码
     
    提示:
    Slave_IO_State, Slave_IO_Running, 和Slave_SQL_Running是No,表明slave还没有开始复制过程。

    2.7 手动同步

    如果Master已经存在数据,则在开启主备复制之前,需要将Master和Slave手动同步一次(/var/lib/mysql整个目录打包tar.gz),具体方法参考《004.MySQL主库手动复制至从库》。
    注意:本实验都是重新安装的MySQL,可直接启动同步。

    三 启动主从

    3.1 Slave启动主从服务

    复制代码
      1 [root@Slave01 ~]# service mysqld restart
      2 [root@Slave01 ~]# mysql -uroot -p
      3 Enter password:
      4 mysql> start slave;
      5 mysql> show slave statusG			#查看slave状态
      6 ……
      7 Slave_IO_State: Waiting for master to send event
      8 Master_Host: 172.24.8.10
      9 Master_User: repl_user
     10 Master_Port: 3306
     11 Connect_Retry: 60
     12 Master_Log_File: mysql-bin.000001
     13 Read_Master_Log_Pos: 120
     14 Relay_Log_File: =mysql-relay-bin.000001
     15 Relay_Log_Pos: 283
     16 Relay_Master_Log_File: mysql-bin.000002
     17 Slave_IO_Running: YES
     18 Slave_SQL_Running: YES
     19 ……
     20 Exec_Master_Log_Pos: 120
     21 Relay_Log_Space: 120
     22 ……
     23 Master_Info_File: /var/lib/mysql/master.info
    复制代码
     
    提示:
    slave的I/O和SQL线程都已经开始运行,而且Seconds_Behind_Master不再是NULL。日志的位置增加了,意味着一些事件被获取并执行了。如果你在master上进行修改,你可以在slave上看到各种日志文件的位置的变化,同样,你也可以看到数据库中数据的变化。

    3.2 验证主从

    在Master主服务器上创建库并插入相应数据:
    复制代码
      1 [root@Master ~]# mysql -uroot -p
      2 Enter password:
      3 mysql> create database mysqltest;
      4 mysql> use mysqltest;
      5 mysql> create table user(id int(5),name char(10));
      6 mysql> insert into user values (00001,'zhangsan');
      7 在Slave从服务器上进行验证:
      8 [root@Master ~]# mysql -uroot -p
      9 Enter password:
     10 mysql> show databases;
     11 mysql> select * from mysqltest.user;
    复制代码
     
    38
    结论:
    从上图中的结果,我们可以看到mysql主从复制已经在起作用了,我们在主数据库中写入的数据已经复制到我们的从数据库中了。
    提示:
    若出现以下报错:
    39
    可尝试重启slave:
      1 mysql> reset slave;
  • 相关阅读:
    Springboot打jar 包
    mysql 函数
    SFTP的使用
    Java Swing
    消息中间件之ActiveMQ
    对象的四种引用关系
    vs的url传参
    后台管理两级类别
    $.dialog弹层---lhgDialog
    正则小数验证和去除中间空格
  • 原文地址:https://www.cnblogs.com/drizzle-xu/p/10276299.html
Copyright © 2020-2023  润新知