搭建mysql高可用集群(主从复制、双机热备必成版)

三台虚拟机:centos7 mini-iso
数据库:Percona 5.6.24(阿里)
my.cnf地址:my.cnf
安装完成后出现pid没有的错误解决办法

所需安装包或有不懂的地方可以留言联系我


1. 安装Percona

1.1 查看环境中自带的数据库并删除

rpm -qa|grep -i MariaDB
rpm -ev mariadb-libs-5.xxxxxx --nodeps

1.2 安装所需依赖

[root@mysql02 software]# yum -y install cmake gcc tcl*

1.3 Percona rpm包上传至虚机并解压,位置随意

[root@mysql02 ~]# cd /home/resources/software/mysql/
[root@mysql02 mysql]#tar -xvf Percona-Server-5.6.24-72.2-r8d0f85b-el6-x86_64-bundle.tar
[root@mysql02 mysql]# ll
总用量 241788
-rw-r--r--. 1 root root     21708 12月 28 15:51 libaio-0.3.107-10.el6.x86_64.rpm
-rw-r--r--. 1 root root 123781120 12月 28 15:51 Percona-Server-5.6.24-72.2-r8d0f85b-el6-x86_64-bundle.tar
-rw-r--r--. 1 root root  70245892 12月 28 15:51 Percona-Server-56-debuginfo-5.6.24-rel72.2.el6.x86_64.rpm
-rw-r--r--. 1 root root   6716252 12月 28 15:51 Percona-Server-client-56-5.6.24-rel72.2.el6.x86_64.rpm
-rw-r--r--. 1 root root   1029880 12月 28 15:51 Percona-Server-devel-56-5.6.24-rel72.2.el6.x86_64.rpm
-rw-r--r--. 1 root root  20452276 12月 28 15:51 Percona-Server-server-56-5.6.24-rel72.2.el6.x86_64.rpm
-rw-r--r--. 1 root root    741292 12月 28 15:51 Percona-Server-shared-56-5.6.24-rel72.2.el6.x86_64.rpm
-rw-r--r--. 1 root root  23086244 12月 28 15:51 Percona-Server-test-56-5.6.24-rel72.2.el6.x86_64.rpm
-rw-r--r--. 1 root root   1499504 12月 28 15:51 Percona-Server-tokudb-56-5.6.24-rel72.2.el6.x86_64.rpm
[root@mysql02 mysql]# pwd
/home/resources/software/mysql

1.5 提前安装libaio,防止之后安装操作出现错误

[root@mysql02 mysql]# rpm -ivh libaio-0.3.107-10.el6.x86_64.rpm
警告:libaio-0.3.107-10.el6.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID c105b9de: NOKEY
准备中...                          ################################# [100%]
	软件包 libaio-0.3.109-13.el7.x86_64 (比 libaio-0.3.107-10.el6.x86_64 还要新) 已经安装
	file /lib64/libaio.so.1.0.0 from install of libaio-0.3.107-10.el6.x86_64 conflicts with file from package libaio-0.3.109-13.el7.x86_64
	file /lib64/libaio.so.1.0.1 from install of libaio-0.3.107-10.el6.x86_64 conflicts with file from package libaio-0.3.109-13.el7.x86_64

1.6 顺序安装
建议一行一行复制安装,全复制一起可能会出错(个人经历)

[root@mysql02 mysql]#
rpm -ivh Percona-Server-56-debuginfo-5.6.24-rel72.2.el6.x86_64.rpm
rpm -ivh Percona-Server-shared-56-5.6.24-rel72.2.el6.x86_64.rpm
rpm -ivh Percona-Server-client-56-5.6.24-rel72.2.el6.x86_64.rpm --nodeps
rpm -ivh Percona-Server-server-56-5.6.24-rel72.2.el6.x86_64.rpm

如果安装Percona-Server-server出现错误:

root@mysql02 mysql]# rpm -ivh Percona-Server-server-56-5.6.24-rel72.2.el6.x86_64.rpm 
警告:Percona-Server-server-56-5.6.24-rel72.2.el6.x86_64.rpm: 头V4 DSA/SHA1 Signature, 密钥 ID cd2efd2a: NOKEY
错误:依赖检测失败:
	/usr/bin/perl 被 Percona-Server-server-56-5.6.24-rel72.2.el6.x86_64 需要
	perl(Data::Dumper) 被 Percona-Server-server-56-5.6.24-rel72.2.el6.x86_64 需要

解决方法:

root@mysql02 mysql]# yum install -y perl*

1.7 最后安装完成检查
2台虚拟机mysql都安装完成后查看/etc/my.cnf是否存在,不存在传入一个即可(博文最顶有本次部署的my.cnf配置文件下载地址)。
然后查看 /var/lib/mysql 目录中有没有mysql数据文件。

[root@mysql02 etc]# ll /var/lib/mysql
总用量 110608
-rw-rw----. 1 mysql mysql 12582912 12月 28 16:38 ibdata1
-rw-rw----. 1 mysql mysql 50331648 12月 28 16:38 ib_logfile0
-rw-rw----. 1 mysql mysql 50331648 12月 28 16:38 ib_logfile1
drwx------. 2 mysql mysql     4096 12月 28 16:38 mysql
drwx------. 2 mysql mysql     4096 12月 28 16:38 performance_schema
-rw-r--r--. 1 root  root       131 12月 28 16:38 RPM_UPGRADE_HISTORY
-rw-r--r--. 1 mysql mysql      131 12月 28 16:38 RPM_UPGRADE_MARKER-LAST
drwx------. 2 mysql mysql        6 12月 28 16:38 test

1.8 设置密码
修改密码(localhost,其他的登录用户信息sqlyog中完成) 默认安装的mysql没有密码,输入命令mysql直接进入
开启外部访问权限

[root@mysql02 etc]# mysqladmin -u root password "root"
[root@mysql02 etc]# mysql -u root -p
mysql> grant all on *.* to 'root'@'%' identified by 'root';

2. 配置主从结构

2.1 修改配置文件/etc/my.cnf
修改server-id 每台设备不同
例如 :
- 主:server-id=1
- 从:server-id=2

2.2 修改完后重启服务
service mysql restart

2.3 查看主节点信息(二进制文件和position值)
登陆主节点

mysql -u root -p

记录主二进制文件(mysql-bin.000001)和position值(120)

mysql> show master status\G
*************************** 1. row ***************************
             File: mysql-bin.000001
         Position: 120
     Binlog_Do_DB: 
 Binlog_Ignore_DB: 
Executed_Gtid_Set: 
1 row in set (0.00 sec)

2.4 从节点执行挂载
登陆从节点

mysql -u root -p

执行语句

CHANGE MASTER TO
MASTER_HOST=‘172.8.8.183’,
MASTER_PORT=3306,
MASTER_USER=‘root’,
MASTER_PASSWORD=‘root’,
MASTER_LOG_FILE=‘mysql-bin.000001’,
MASTER_LOG_POS=120;

ip 端口等信息根据自身情况修改。
接着启动从节点

start slave;

查看从状态

mysql> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 172.8.8.182
                  Master_User: root
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000003
          Read_Master_Log_Pos: 2058
               Relay_Log_File: mysqld8202-relay-bin.000004
                Relay_Log_Pos: 502
        Relay_Master_Log_File: mysql-bin.000003
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: 
          Replicate_Ignore_DB: 
           Replicate_Do_Table: 
       Replicate_Ignore_Table: 
      Replicate_Wild_Do_Table: 
  Replicate_Wild_Ignore_Table: 
                   Last_Errno: 0
                   Last_Error: 
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 2058
              Relay_Log_Space: 680
              Until_Condition: None
               Until_Log_File: 
                Until_Log_Pos: 0
           ......

查看 Slave_IO_Running、Slave_SQL_Running线程是否为yes,若不是,查看刚才挂载信息是否有误,或尝试重启服务。

2.5 总结
理论来说主从复制,主负责写,从负责读,
目前完成了主从复制,虽有主从关系但是并没有维护读写分离的状态
主库中有数据,须将数据.sql文件在从上执行再挂载,否则虽然挂在上,中继日志读取的操作只是主库最近的操作,没有库表无法执行。同理,主从复制状态下的从库删除库表,虽对主库数据没有影响,但是当其执行中继日志操作时,为主库当前操作,没有库表无法执行。

3. mysql双机热备

数据库复杂的集群结构 、布式数据库中,保证单个数据分片的高可用可靠性,每一个数据分片对应的数据库集群模式方式是双机热备。
简单来说就是两个mysql服务互为主从,将以上挂载在主上执行即可。

4. 检验

在一个节点上操作mysql 在另一个节点上查看操作是否生效。

5.扩展

搭建高可用数据库集群,使用Keepalived+主从HAProxy+主从mycat+数据库双主双从结构,如图:
搭建mysql高可用集群(主从复制、双机热备必成版)_第1张图片
近期更新,持续关注

你可能感兴趣的:(Mysql)