• 002.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_thumb1
    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_thumb1
    结论:
    从上图中的结果,我们可以看到mysql主从复制已经在起作用了,我们在主数据库中写入的数据已经复制到我们的从数据库中了。
    提示:
    若出现以下报错:
    39_thumb1
    可尝试重启slave:
      1 mysql> reset slave;
  • 相关阅读:
    Windows 科研软件推荐
    有关Python 包 (package) 的基本知识
    《Using Python to Access Web Data》Week4 Programs that Surf the Web 课堂笔记
    Coursera助学金申请模板
    《Using Databases with Python》 Week2 Basic Structured Query Language 课堂笔记
    Jupyter 解决单个变量输出问题
    解决 pandas 中打印 DataFrame 行列显示不全的问题
    《Using Python to Access Web Data》 Week3 Networks and Sockets 课堂笔记
    缓存击穿及解决方案
    jvm垃圾收集器
  • 原文地址:https://www.cnblogs.com/itzgr/p/10325973.html
Copyright © 2020-2023  润新知