一、编写脚本,支持让用户自主选择,使用mysqldump还是xtraback全量备份。
BACKUPDIR="/data"
USERNAME=yanwei
PASSWORD=centos
DATE=`date +%F-%T`
mainmenu (){
cat << EOF
1)mysqldump
2)xtraback
3)quit
EOF
while read -p "Please choose a backup method:" BAKME;do
case $BAKME in
1)
submenu
;;
2)
[[ -d $BACKUPDIR/xtrabackup/$DATE ]] || mkdir -pv $BACKUPDIR/xtrabackup/$DATE &> /dev/null
xtrabackup --user=$USERNAME --password=$PASSWORD --backup \
--target-dir=$BACKUPDIR/xtrabackup/$DATE &>/dev/null \
&& echo "mysql is backup success"
exit
;;
3)
exit
;;
*)
echo "please input again"
esac
done
}
submenu () {
cat <<EOF
1)Innodb
2)MyISAM
3)quit
EOF
while read -p "Please choose an engine for mysql:" ENGINE;do
case $ENGINE in
1)
[[ -d $BACKUPDIR/mysqldump/ ]] || mkdir -pv $BACKUPDIR/mysqldump/ &> /dev/null
mysqldump -u$USERNAME -p$PASSWORD -A -F -E -R -q \
--single-transaction --master-data=1 --flush-privileges \
--triggers --default-character-set=utf8 \
--hex-blob | gzip > $BACKUPDIR/mysqldump/fullbak_$DATE.sql.gz \
&& echo "mysql is backup success"
submenu
;;
2)
[[ -d $BACKUPDIR/mysqldump/ ]] || mkdir -pv $BACKUPDIR/mysqldump/ &> /dev/null
mysqldump -u$USERNAME -p$PASSWORD –A –F –E –R –x -q \
--master-data=1 --flush-privileges \
--triggers --default-character-set=utf8 \
--hex-blob | gzip > $BACKUPDIR/mysqldump/fullbak_$DATE.sql.gz \
&& echo "mysql is backup success"
submenu
;;
3)
mainmenu
;;
*)
echo "please input again"
esac
done
}
mainmenu
二、配置Mysql主从同步
yum install -y mariadb-server
systemctl start mariadb.service
systemctl enable mariadb.service
mysql_secure_installation
1 主服务器
yum install -y mariadb-server #安装数据库
systemctl start mariadb.service #启动服务
systemctl enable mariadb.service #设置开启启动
mysql < hellodb_innodb.sql #导入测试数据库
mysql_secure_installation #执行安全初始化脚本
#修改配置文件
vim /etc/my.cnf
server-id=1
log-bin=/data/logbin/mysql #开启二进制日志
mkdir /data/logbin
chown -R mysql.mysql /data/logbin
systemctl restart mariadb.service
#创建从节点同步账户
mysql> grant replication slave on *.* to repluser@'192.168.36.%' identified by 'centos';
#全量备份主节点数据
mysqldump -uroot -pcentos -A --single-transaction --master-data=1 -F > /data/all.sql
#备份数据传到从节点
scp /data/all.sql 192.168.44.27:/data
show master logs;
2 从服务器
yum install -y mariadb-server #安装数据库
systemctl start mariadb.service #启动服务
systemctl enable mariadb.service #设置开启启动
mysql_secure_installation #执行安全初始化脚本
#修改配置文件
vim /etc/my.cnf
server-id=2
read-only
systemctl restart mariadb.service
vim /data/all.sql
CHANGE MASTER TO
MASTER_HOST='192.168.44.17',
MASTER_USER='repluser',
MASTER_PASSWORD='centos',
MASTER_PORT=3306,
MASTER_LOG_FILE='mysql.000001',
MASTER_LOG_POS=245;
mysql -uroot -pcentos < /data/all.sql
#启用同步线程
mysql> start slave;
show slave status\G
主节点插入一条数据
在从节点查询数据是否同步
三、使用MHA实现Mysql高可用。
前提:已完成一主多从配置,配置方法参照第二题。
管理节点:192.168.44.7
被管理节点:一主二从
主:192.168.44.17
从:192.168.44.27、192.168.44.37
1、安装MHA包
在管理节点上安装两个包
mha4mysql-manager
mha4mysql-node
yum install -y mha*.rpm
在被管理节点安装
mha4mysql-node
yum install -y mha*.rpm
2、在管理节点建立配置文件
vim /etc/mastermha/app1.cnf
[server default]
user=mhauser #在主从节点创建好账户
password=magedu
manager_workdir=/data/mastermha/app1/ #会自动生成,无需手工创建
manager_log=/data/mastermha/app1/manager.log
remote_workdir=/data/mastermha/app1/ #会自动生成,无需手工创建
ssh_user=root #需要配置基于KEY验证
repl_user=repluser
repl_password=magedu
ping_interval=1 #心跳间隔
[server1]
hostname=192.168.44.17
candidate_master=1
[server2]
hostname=192.168.44.27
candidate_master=1 #优先选择谁是新的主
[server3]
hostname=192.168.44.37
3、实现Master
vim /etc/my.cnf
[mysqld]
log-bin
server_id=1
skip_name_resolve=1 #禁止反向解析
systemctl restart mariadb.service
mysql>show master logs
mysql>grant replication slave on *.* to repluser@'192.168.44.%' identified by 'magedu'; #创建复制账号
mysql>grant all on *.* to mhauser@'192.168.44.%' identified by 'centos'; #创建mha管理账号
4、实现slave
vim /etc/my.cnf
[mysqld]
server_id=2 不同节点此值各不相同
log-bin
read_only
relay_log_purge=0 #不清除中继日志
skip_name_resolve=1 #禁止反向解析
systemctl restart mariadb.service
mysql>CHANGE MASTER TO MASTER_HOST='192.168.44.17',
MASTER_USER='repluser', MASTER_PASSWORD='centos',
MASTER_LOG_FILE='mariadb-bin.000001', MASTER_LOG_POS=245;
mysql>start slave;
5、在所有节点相互之间ssh key验证
ssh-keygen -t rsa -P "" -f /root/.ssh/id_rsa
ssh-copy-id 192.168.44.7
scp -r /root/.ssh 192.168.44.17:/root/
scp -r /root/.ssh 192.168.44.27:/root/
scp -r /root/.ssh 192.168.44.37:/root/
6、Mha验证和启动
masterha_check_ssh --conf=/etc/mastermha/app1.cnf #ssh验证
masterha_check_repl --conf=/etc/mastermha/app1.cnf #复制验证
masterha_manager --conf=/etc/mastermha/app1.cnf #启动MHA
排错日志:/data/mastermha/app1/manager.log
注:一次性的,主宕机后,提升从节点为主然后该程序退出。
测试:主节点mysql服务异常
测试前状态:
主节点停止服务:
测试后状态(主节点切换至192.168.44.27):