0
点赞
收藏
分享

微信扫一扫

rhel 6.5搭建MySQL 5.5.18一主一从高可用架构

文档课题:rhel 6.5搭建MySQL 5.5.18一主一从高可用架构.
系统:rhel 6.5 64位
数据库:MySQL 5.5.18
数据库安装包:mysql-5.5.18.tar.gz
Xtrabackup安装包:percona-xtrabackup-24-2.4.6-2.el6.x86_64.rpm
架构信息如下:

rhel 6.5搭建MySQL 5.5.18一主一从高可用架构_MySQL

1、主从搭建
1.1、前期准备
安装两台MySQL数据库主机后,配置好主机IP地址,确保两台服务器之间可以互相ping通,并注意防火墙状态.
--关闭防火墙
[root@MySQL5518-Master ~]# service iptables status
Table: filter
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination         
1    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED 
2    ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0           
3    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
4    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:22 
5    REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited 

Chain FORWARD (policy ACCEPT)
num  target     prot opt source               destination         
1    REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited 

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination         
[root@MySQL5518-Master ~]# service iptables stop
iptables: Setting chains to policy ACCEPT: filter          [  OK  ]
iptables: Flushing firewall rules:                         [  OK  ]
iptables: Unloading modules:                               [  OK  ]
[root@MySQL5518-Master ~]# service iptables status
iptables: Firewall is not running.

1.2、主节点配置
1.2.1、开启binlog
--检查数据库binlog情况.
mysql> show variables like '%log_bin%';
+---------------------------------+-------+
| Variable_name                   | Value |
+---------------------------------+-------+
| log_bin                         | OFF   |
| log_bin_trust_function_creators | OFF   |
| sql_log_bin                     | ON    |
+---------------------------------+-------+
3 rows in set (0.00 sec)

mysql> show variables like '%datadir%';
+---------------+------------------+
| Variable_name | Value            |
+---------------+------------------+
| datadir       | /var/mysql/data/ |
+---------------+------------------+
1 row in set (0.00 sec)

--主节点开启binlog日志,在/etc/my.cnf文件的[mysqld]添加如下参数,开启binlog功能.
[mysql@MySQL5518-Master ~]$ vi /etc/my.cnf
添加如下:
log_bin="/var/mysql/binlog/mysql-bin"
expire_logs_days = 7
max_binlog_size = 100M
innodb_buffer_pool_size=1G

--新建目录
[root@MySQL5518-Master ~]# cd /var/mysql
[root@MySQL5518-Master mysql]# mkdir binlog
[root@MySQL5518-Master mysql]# chown -R mysql:mysql binlog

说明:
a、系统层面需新建目录/var/mysql/binlog
b、expire_logs_days表示二进制日志文件保留天数,max_binlog_size表示二进制日志文件最大大小.
c、注意server-id主从节点需不同.

--重启mysql服务后确认log_bin是否开启.
[root@MySQL5518-Master mysql]# service mysqld restart
Shutting down MySQL.                                       [  OK  ]
Starting MySQL..                                           [  OK  ]

mysql> show variables like '%log_bin%';
+---------------------------------+-------+
| Variable_name                   | Value |
+---------------------------------+-------+
| log_bin                         | ON    |
| log_bin_trust_function_creators | OFF   |
| sql_log_bin                     | ON    |
+---------------------------------+-------+
3 rows in set (0.00 sec)
说明:log_bin参数为on表示二进制日志文件已成功开启.

1.2.2、配置账户
--在master上配置复制所需账户repl,%表示任何远程地址的repl用户都可以连接master主机,语句如下:
mysql> grant replication slave on *.* to repl@'%' identified by 'repl@12345';
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

1.2.3、主库信息
mysql> use booksDB;
Database changed
mysql> show tables;
+-------------------+
| Tables_in_booksDB |
+-------------------+
| authorbook        |
| authors           |
| books             |
+-------------------+
3 rows in set (0.00 sec)

--主库file与position信息.
mysql> show master status \G
*************************** 1. row ***************************
            File: mysql-bin.000001
        Position: 326
    Binlog_Do_DB: 
Binlog_Ignore_DB: 
1 row in set (0.00 sec)

注意:此处File与Position在后面从库操作时需要.

1.2.4、全库备份
[mysql@MySQL5518-Master ~]$ /usr/bin/innobackupex --defaults-file=/etc/my.cnf --socket=/tmp/mysql.sock --user=root --password=mysql_4U --port=3306 --slave-info --stream=tar --tmpdir=/mysql/tmpfile /mysql/bak/ 2>/mysql/log_bak/backup.log |gzip ->/mysql/bak/192.168.133.122_20230819_3306.tar.gz

注意:此处需安装xtraback备份软件,才能进行innobackupex备份.

1.2.5、scp备份集
[mysql@MySQL5518-Master bak]$ scp 192.168.133.122_20230819_3306.tar.gz mysql@192.168.133.123:/mysql/bak

1.3、从节点配置
1.3.1、关闭从节点
[root@MySQL5518-Slave ~]# ps -ef|grep mysql
root      45471      1  0 Aug19 ?        00:00:00 /bin/sh /usr/local/webserver/mysql/bin/mysqld_safe --datadir=/var/mysql/data --pid-file=/var/mysql/data/MySQL5518-Slave.pid
mysql     45818  45471  0 Aug19 ?        00:00:17 /usr/local/webserver/mysql/bin/mysqld --basedir=/usr/local/webserver/mysql --datadir=/var/mysql/data --plugin-dir=/usr/local/webserver/mysql/lib/plugin --user=mysql --log-error=/var/mysql/data/MySQL5518-Slave.err --pid-file=/var/mysql/data/MySQL5518-Slave.pid --socket=/tmp/mysql.sock --port=3306
root      58045  58025  0 10:43 pts/3    00:00:00 grep mysql

[root@MySQL5518-Slave ~]# kill -9 45471
[root@MySQL5518-Slave ~]# kill -9 45818
[root@MySQL5518-Slave ~]# ps -ef|grep mysql
root      58051  58025  0 10:43 pts/3    00:00:00 grep mysql

1.3.2、删除数据文件
--查数据文件目录
[root@MySQL5518-Slave ~]# cat /etc/my.cnf | grep datadir
datadir=/var/mysql/data

--清空数据文件
[root@MySQL5518-Slave ~]# cd /var/mysql/data
[root@MySQL5518-Slave data]# ll
total 28692
-rw-rw----. 1 mysql mysql 18874368 Aug 19 12:39 ibdata1
-rw-rw----. 1 mysql mysql  5242880 Aug 19 12:39 ib_logfile0
-rw-rw----. 1 mysql mysql  5242880 Aug 19 12:39 ib_logfile1
drwx------. 2 mysql root      4096 Aug 19 12:35 mysql
-rw-rw----. 1 mysql root      1584 Aug 19 12:39 MySQL5518-Slave.err
-rw-rw----. 1 mysql mysql        6 Aug 19 12:39 MySQL5518-Slave.pid
drwx------. 2 mysql mysql     4096 Aug 19 12:35 performance_schema
drwx------. 2 mysql root      4096 Aug 19 12:35 test
[root@MySQL5518-Slave data]# rm -rf *

1.3.3、从节点恢复
说明:将主库传输到从库的备份集在从库进行恢复.
--解压备份集
[root@MySQL5518-Slave mysql]# su - mysql
[mysql@MySQL5518-Slave ~]$ cd /mysql/bak
[mysql@MySQL5518-Slave bak]$ tar -zxivf 192.168.133.122_20230819_3306.tar.gz -C /var/mysql/data

--对全量备份做准备
[mysql@MySQL5518-Slave bak]$ /usr/bin/innobackupex --defaults-file=/etc/my.cnf --apply-log /var/mysql/data

检查方法
——最后一句是不是    completed OK!

说明:如上所示,数据成功在从节点恢复.

1.3.4、修改配置文件
--修改从节点配置文件my.cnf
[mysql@MySQL5518-Slave ~]$ vi /etc/my.cnf
添加如下:
log_bin="/var/mysql/binlog/mysql-bin"
expire_logs_days = 7
max_binlog_size = 100M
innodb_buffer_pool_size=1G
server-id       = 2

--新建目录
[root@MySQL5518-Slave ~]# cd /var/mysql
[root@MySQL5518-Slave mysql]# ll
total 4
drwx------. 6 mysql root 4096 Aug 20 10:50 data
[root@MySQL5518-Slave mysql]# mkdir binlog
[root@MySQL5518-Slave mysql]# chown -R mysql:mysql binlog

注意:
a、需将server-id=2写到[mysqld]后面,需保证主从server-id不相同.
b、需新建目录/var/mysql/binlog.

1.3.5、主从同步设置
 [mysql@MySQL5518-Slave bak]$ service mysqld start
Starting MySQL..                                           [  OK  ]

--也可通过如下方式找出从节点change master时需要的file与position信息.
[root@MySQL5518-Slave data]# cd /var/mysql/data
[root@MySQL5518-Slave data]# cat xtrabackup_binlog_info
mysql-bin.000001        326

[mysql@MySQL5518-Slave ~]$ mysql -uroot -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.5.18-log Source distribution

Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> reset master;
Query OK, 0 rows affected (0.01 sec)

mysql> change master to
    -> master_host='192.168.133.122',
    -> master_user='repl',
    -> master_password='repl@12345',
    -> master_log_file='mysql-bin.000001',
    -> master_log_pos=326;
Query OK, 0 rows affected (0.01 sec)

注意:此处master_log_file与master_log_pos为此前Master主库所查得信息,或者通过从节点的xtrabackup_binlog_info查询所得.
说明:
master_host 表示实现复制的主机ip地址
master_user 表示实现复制的登录远程主机的用户
master_password 表示实现复制的登录远程主机的密码
master_log_file 表示实现复制的binlog日志文件
master_log_pos 表示实现复制的binlog日志文件的偏移量

--开启slave
mysql> start slave;
Query OK, 0 rows affected (0.00 sec)

mysql> show slave status \G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.133.122
                  Master_User: repl
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000001
          Read_Master_Log_Pos: 326
               Relay_Log_File: MySQL5518-Slave-relay-bin.000005
                Relay_Log_Pos: 253
        Relay_Master_Log_File: mysql-bin.000001
             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: 326
              Relay_Log_Space: 419
              Until_Condition: None
               Until_Log_File: 
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File: 
           Master_SSL_CA_Path: 
              Master_SSL_Cert: 
            Master_SSL_Cipher: 
               Master_SSL_Key: 
        Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error: 
               Last_SQL_Errno: 0
               Last_SQL_Error: 
  Replicate_Ignore_Server_Ids: 
             Master_Server_Id: 1
1 row in set (0.00 sec)

2、主从复制测试
--Master端执行如下命令:
mysql> show processlist;
+----+------+-----------------------+---------+-------------+------+-----------------------------------------------------------------------+------------------+
| Id | User | Host                  | db      | Command     | Time | State                                                                 | Info             |
+----+------+-----------------------+---------+-------------+------+-----------------------------------------------------------------------+------------------+
|  1 | root | localhost             | booksDB | Query       |    0 | NULL                                                                  | show processlist |
|  6 | repl | 192.168.133.123:34847 | NULL    | Binlog Dump |  102 | Master has sent all binlog to slave; waiting for binlog to be updated | NULL             |
+----+------+-----------------------+---------+-------------+------+-----------------------------------------------------------------------+------------------+
2 rows in set (0.00 sec)
mysql> create database fruitsDB;
Query OK, 1 row affected (0.00 sec)

mysql> use fruitsDB;
Database changed
mysql> create table fruits
    -> (
    -> f_id char(10) not null,
    -> s_id int not null,
    -> f_name char(255) not null,
    -> f_price decimal(8,2) not null,
    -> primary key(f_id)
    -> ) ENGINE=innodb default charset=utf8 auto_increment=1;
Query OK, 0 rows affected (0.02 sec)

mysql> insert into fruits (f_id,s_id,f_name,f_price)
    -> values('a1',101,'apple',5.2),
    -> ('b1',101,'blackberry',10.2),
    -> ('bs1',102,'orange',11.2),
    -> ('bs2',105,'melon',8.2),
    -> ('t1',102,'banana',10.3),
    -> ('t2',102,'grape',5.3),
    -> ('o2',103,'coconut',9.2),
    -> ('c0',101,'cherry',3.2),
    -> ('a2',103,'apricot',2.2),
    -> ('l2',104,'lemon',6.4),
    -> ('b2',104,'berry',7.6),
    -> ('m1',106,'mango',15.7),
    -> ('m2',105,'xbabay',2.6),
    -> ('t4',107,'xbababa',3.6),
    -> ('m3',105,'xxtt',11.6),
    -> ('b5',107,'xxxx',3.6);
Query OK, 16 rows affected (0.00 sec)
Records: 16  Duplicates: 0  Warnings: 0

mysql> show tables;
+--------------------+
| Tables_in_fruitsDB |
+--------------------+
| fruits             |
+--------------------+
1 row in set (0.00 sec)

mysql> select * from fruits;
+------+------+------------+---------+
| f_id | s_id | f_name     | f_price |
+------+------+------------+---------+
| a1   |  101 | apple      |    5.20 |
| a2   |  103 | apricot    |    2.20 |
| b1   |  101 | blackberry |   10.20 |
| b2   |  104 | berry      |    7.60 |
| b5   |  107 | xxxx       |    3.60 |
| bs1  |  102 | orange     |   11.20 |
| bs2  |  105 | melon      |    8.20 |
| c0   |  101 | cherry     |    3.20 |
| l2   |  104 | lemon      |    6.40 |
| m1   |  106 | mango      |   15.70 |
| m2   |  105 | xbabay     |    2.60 |
| m3   |  105 | xxtt       |   11.60 |
| o2   |  103 | coconut    |    9.20 |
| t1   |  102 | banana     |   10.30 |
| t2   |  102 | grape      |    5.30 |
| t4   |  107 | xbababa    |    3.60 |
+------+------+------------+---------+
16 rows in set (0.01 sec)

--Slave端检查.
mysql> use fruitsDB;
Database changed
mysql> select * from fruits;
+------+------+------------+---------+
| f_id | s_id | f_name     | f_price |
+------+------+------------+---------+
| a1   |  101 | apple      |    5.20 |
| a2   |  103 | apricot    |    2.20 |
| b1   |  101 | blackberry |   10.20 |
| b2   |  104 | berry      |    7.60 |
| b5   |  107 | xxxx       |    3.60 |
| bs1  |  102 | orange     |   11.20 |
| bs2  |  105 | melon      |    8.20 |
| c0   |  101 | cherry     |    3.20 |
| l2   |  104 | lemon      |    6.40 |
| m1   |  106 | mango      |   15.70 |
| m2   |  105 | xbabay     |    2.60 |
| m3   |  105 | xxtt       |   11.60 |
| o2   |  103 | coconut    |    9.20 |
| t1   |  102 | banana     |   10.30 |
| t2   |  102 | grape      |    5.30 |
| t4   |  107 | xbababa    |    3.60 |
+------+------+------------+---------+
16 rows in set (0.00 sec)

说明:如上所示,Slave端能查询出Master端的新增的数据库fruitsDB和表fruits. 数据成功同步到Slave.

举报

相关推荐

0 条评论