第十六周

1、编写脚本,支持让用户自主选择,使用mysqldump还是xtraback全量备份。

[root@master ~]# cat backup.sh 
#!/bin/bash

PS3="Please choose a backup method:"
select method in mysqldump xtraback quit;do
	case $REPLY in
	1)
		mkdir -p /backup/mysqldump &> /dev/null
		mysqldump -F -A --single-transaction --master-data=1 > /backup/mysqldump/all.sql 2> /dev/null
		if [ $? -eq 0 ];then
		 	echo "The data backed up is in /backup/mysqldump."
			exit 0
		else
			echo "Something error."
			exit 10
		fi
		;;
	2)
		mkdir -p /backup/xtraback &> /dev/null
		xtrabackup --backup --target-dir=/backup/xtraback &> /dev/null
		if [ $? -eq 0 ];then
			echo "The data backed up is in /backup/xtraback."
			exit 0
		else
			echo "Something error."
			exit 20;	
		fi
		;;
	3)
		break
		;;
	*)	
		echo "Please input again!"
		;;
	esac

done

2、配置Mysql主从同步

主服务器:ip 192.168.10.130;从服务器:ip 192.168.10.128

实验步骤:

  • 主服务器配置

# 添加下面两句
[root@master ~]# vim /etc/my.cnf
[mysqld]
server-id=1
log-bin=/data/logbin/binlog

# 重启数据库服务
[root@master ~]# systemctl restart mariadb

# 创建同步账号
[root@master ~]# mysql
MariaDB [(none)]> grant replication slave on *.* to repluser@'192.168.10.%' identified by '123456';

# 查看日志位置,需要在从服务器上填写需要同步的起始位置
MariaDB [(none)]> show master logs;
+---------------+-----------+
| Log_name      | File_size |
+---------------+-----------+
| binlog.000001 |       245 |
+---------------+-----------+
1 row in set (0.00 sec)
  • 从服务器配置

# 编辑/etc/my.cnf文件,添加下面两行,这里的server-id要和主服务器的配置不同
[root@slave ~]#vim /etc/my.cnf
[mysqld]
server-id=2
read-only=on

# 使用具有复制权限的账号连接至主服务器,并启动复制线程
[root@slave ~]#mysql
MariaDB [(none)]> CHANGE MASTER TO
    ->   MASTER_HOST='192.168.10.130',
    ->   MASTER_USER='repluser',
    ->   MASTER_PASSWORD='123456',
    ->   MASTER_PORT=3306,
    ->   MASTER_LOG_FILE='binlog.000001',
    ->   MASTER_LOG_POS=245;
    
MariaDB [(none)]> start slave;
  • 验证结果

# 在主服务器上添加两个数据库db1和db2,看是否同步到从服务器上
[root@master ~]# mysql
MariaDB [(none)]> create database db1;
Query OK, 1 row affected (0.00 sec)

MariaDB [(none)]> create database db1;
Query OK, 1 row affected (0.00 sec)

# 可以看到从服务器已经同步了数据
[root@slave ~]#mysql
MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| db1                |
| db2                |
| mysql              |
| performance_schema |
| test               |
+--------------------+
6 rows in set (0.00 sec)

# 可以在从服务器上通过下面的命令查看同步状态
MariaDB [(none)]> show slave status\G
MariaDB [(none)]> show processlist;

3、使用MHA实现Mysql高可用。

mha-manager:192.168.10.128

master:192.168.10.129

slave1:192.168.10.130

slave2:192.168.10.131

  • 配置主从复制

    master配置

# 编辑配置文件,添加下面的配置
[root@master ~]# vim /etc/my.cnf
[mysqld]
server-id=129
log-bin
skip_name_resolve

# 重启服务
[root@master ~]# systemctl restart mariadb

# 创建同步账号repluser,mha的管理账号mhauser
[root@slave1 ~]# mysql
MariaDB [(none)]> grant replication slave on *.* to 'repluser'@'192.168.10.%' identified by '123456';
MariaDB [(none)]> grant all on *.* to mhauser@'192.168.10.%' identified by '123456';

slave1配置

# 修改配置文件,添加下面几行,从服务器除了server-id不同,其他的都相同
[root@slave1 ~]# vim /etc/my.cnf
[mysqld]
server-id=130
read-only=on
skip_name_resolve
relay_log_purge=0

# 重启服务
[root@slave1 ~]# systemctl restart mariadb

# 设置同步参数,然后启动复制线程,同步时间点设置为第一个二进制日志的245,这样可以复制主服务器的所有配置,slave2也相同
[root@slave1 ~]# mysql
MariaDB [(none)]> CHANGE MASTER TO
    ->   MASTER_HOST='192.168.10.129',
    ->   MASTER_USER='repluser',
    ->   MASTER_PASSWORD='123456',
    ->   MASTER_PORT=3306,
    ->   MASTER_LOG_FILE='mariadb-bin.000001',
    ->   MASTER_LOG_POS=245;

MariaDB [(none)]> start slave;

slave2配置

# 修改配置文件,添加下面几行
[root@slave2 ~]# vim /etc/my.cnf
[mysqld]
server-id=131
read-only=on
skip_name_resolve
relay_log_purge=0

# 重启服务
[root@slave2 ~]# systemctl restart mariadb

# 设置同步参数,然后启动复制线程
[root@slave2 ~]# mysql
MariaDB [(none)]> CHANGE MASTER TO
    ->   MASTER_HOST='192.168.10.129',
    ->   MASTER_USER='repluser',
    ->   MASTER_PASSWORD='123456',
    ->   MASTER_PORT=3306,
    ->   MASTER_LOG_FILE='mariadb-bin.000001',
    ->   MASTER_LOG_POS=245;
    
MariaDB [(none)]> start slave;
  • 配置MHA

安装软件包

需要用到下面两个软件包

mha4mysql-manager-0.56-0.el6.noarch.rpm

mha4mysql-node-0.56-0.el6.noarch.rpm

mha-manager两个包都要装,其他主机只需要安装node包

安装时需要开启epel源,使用yum install方式可以安装依赖包

[root@mha-manager ~]#yum install mha*
[root@master ~]# yum install mha4mysql-node-0.56-0.el6.noarch.rpm
[root@slave1 ~]# yum install mha4mysql-node-0.56-0.el6.noarch.rpm
[root@slave2 ~]# yum install mha4mysql-node-0.56-0.el6.noarch.rpm 

配置相互之间的ssh免密登陆

# 生成密钥
[root@mha-manager ~]# ssh-keygen
# 把密钥复制到自己的目录下
[root@mha-manager ~]#ssh-copy-id 192.168.10.128

# 把整个.ssh目录拷贝到三台服务器上,这样就可以实现两两之间的免密登录
[root@mha-manager ~]#scp -r .ssh 192.168.10.129:/root
[root@mha-manager ~]#scp -r .ssh 192.168.10.130:/root
[root@mha-manager ~]#scp -r .ssh 192.168.10.131:/root

编辑mha-manager配置文件

# 这里的/etc/mha/app1.cnf文件可以是任意名字,内容如下
[root@mha-manager ~]#vim /etc/mha/app1.cnf
[server default]
user=mhauser
password=123456
manager_workdir=/data/mastermha/app1/       # /data/mastermha目录会自动创建
manager_log=/data/mastermha/app1/manager.log
remote_workdir=/data/mastermha/app1/
ssh_user=root
repl_user=repluser
repl_password=123456
ping_interval=1

[server1]
hostname=192.168.10.129
candidate_master=1
[server2]
hostname=192.168.10.130
candidate_master=1                         # 有这条命令的节点,在master服务器down之后,会优先成为master
[server3]
hostname=192.168.10.131

启动mha服务

# 先使用下面两条命令,检查一下环境
[root@mha-manager ~]#mastermasterha_check_repl --conf=/etc/mha/app1.cnf
[root@mha-manager ~]#mastermasterha_check_repl --conf=/etc/mha/app1.cnf

# 启动服务,mha是前台执行,如果监测到主服务器down,就会退出,可以使用screen或者nohup后台执行
[root@mha-manager ~]#masterha_manager --conf=/etc/mha/app1.cnf
  • 测试

可以先把master(192.168.10.129)关机,slave1(192.168.10.130)是否提升为主节点

注意:新提升的主节点,在配置文件中的read_only选项需要手动关闭

# 通过在slave2上查看同步信息,可以看到Master_Host已经变成了192.168.10.130
[root@slave2 ~]# mysql
MariaDB [(none)]> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.10.130
                  Master_User: repluser
                  Master_Port: 3306
                  Connect_Retry: 60
                  ......
                  
# read_only选项也修改为了off
MariaDB [(none)]> show variables like 'read_only';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| read_only     | OFF   |
+---------------+-------+
1 row in set (0.00 sec)
posted @ 2020-08-12 00:01  scott_Lsh  阅读(144)  评论(0)    收藏  举报