第十六周
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)

浙公网安备 33010602011771号