1、Mysql安装
#下载安装包
wget https://cdn.mysql.com//Downloads/MySQL-5.7/mysql-server_5.7.26-1ubuntu18.04_amd64.deb-bundle.tar
#安装MySQL
sudo dpkg -i mysql-common_5.7.26-1ubuntu18.04_amd64.deb
sudo dpkg-preconfigure mysql-community-server_5.7.26-1ubuntu18.04_amd64.deb
sudo dpkg -i libmysqlclient20_5.7.26-1ubuntu18.04_amd64.deb
sudo dpkg -i libmysqlclient-dev_5.7.26-1ubuntu18.04_amd64.deb
sudo dpkg -i mysql-community-client_5.7.26-1ubuntu18.04_amd64.deb
sudo dpkg -i mysql-client_5.7.26-1ubuntu18.04_amd64.deb
sudo apt update
sudo apt install libmecab2
sudo dpkg -i mysql-community-server_5.7.26-1ubuntu18.04_amd64.deb
sudo dpkg -i mysql-server_5.7.26-1ubuntu18.04_amd64.deb
设置sudo免密码
设置当前用户sudo免密码
cd /etc/sudoers.d
touch nopwd4sudo
vi nopwd4sudo
用户名 ALL=(ALL) NOPASSWD : ALL
sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf
[mysqld]
bind-address = 0.0.0.0
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-client-handshake=FALSE
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
init_connect='SET NAMES utf8mb4'
# sql_mode的方式强制指定不需要ONLY_FULL_GROUP_BY属性
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
#设置不区分大小写
lower_case_table_names=1
[mysql]
# 设置mysql客户端默认字符集
default-character-set = utf8mb4
[client]
default-character-set = utf8mb4
# 进入MySQL:
mysql -u root -p
# 启动:
sudo service mysql start
# 重启:
sudo service mysql restart
# 关闭:
sudo service mysql stop
# 检查mysql是否在运行:
sudo service mysql status
# 数据库目录
/var/lib/mysql/
# 配置文件
/usr/share/mysql(mysql.server命令及配置文件)
# 相关命令
/usr/bin(mysqladmin mysqldump等命令)
# 启动脚本
/etc/init.d/(启动脚本文件mysql的目录)
2、分配用户权限
# 创建数据库
create database ***;
# 新建用户并授权(https://www.cnblogs.com/sos-blue/p/6852945.html)
CREATE USER 'username'@'host' IDENTIFIED BY 'password';
GRANT all privileges ON databasename.tablename TO 'username'@'host'
# 新增具体权限
# grant 普通数据用户,查询、插入、更新、删除 数据库中所有表数据的权利。
grant select on testdb.* to common_user@'%'
grant insert on testdb.* to common_user@'%'
grant update on testdb.* to common_user@'%'
grant delete on testdb.* to common_user@'%'
# 或者,用一条 MySQL 命令来替代:
grant create, alter, drop, select, insert, update, delete on testdb.* to common_user@'%'
3、数据备份
wget https://www.percona.com/downloads/Percona-XtraBackup-2.4/Percona-XtraBackup-2.4.15/binary/debian/bionic/x86_64/percona-xtrabackup-24_2.4.15-1.bionic_amd64.deb
sudo dpkg -i percona-xtrabackup-24_2.4.15-1.bionic_amd64.deb
# 出现依赖问题:(https://blog.csdn.net/ROVAST/article/details/51817274)
sudo apt-get update # 更新
sudo apt-get -f install # 解决依赖关系
sudo dpkg -i xxx.deb # 重新安装
# mysql授权(https://www.percona.com/doc/percona-xtrabackup/2.4/using_xtrabackup/privileges.html)
CREATE USER 'backup'@'localhost' IDENTIFIED BY '...';
GRANT PROCESS, RELOAD, LOCK TABLES, REPLICATION CLIENT ON *.* TO 'backup'@'localhost';
FLUSH PRIVILEGES;
#!/bin/sh
#percona-xtrabackup全量和增量备份脚本
#Author :Will
#WebSite : www.52os.net
#date : 2015/10/21
#usage: 1. full backup : ./backup.sh full
# 2. incremental backup : ./backup.sh inc
Innobackupex_Path=/usr/bin/innobackupex
Mysql_Client=/usr/bin/mysql
Bak_Time=`date +%Y%m%d_%H%M%S`
#请勿在Incrbackup_Path及下属文件夹创建或写入内容,否则可能导致增量备份不成功
#Backup_Dir=/opt/backup #备份主目录
#Backup_Dir=/opt/backup/data/`date -I` #按日期生成备份主目录
Backup_Dir=/home/mysql/backup/data
Fullbackup_Path=$Backup_Dir/full/`date -I` # 全库备份的目录
Incrbackup_Path=$Backup_Dir/incr/`date -I`/`date +%H` # 增量备份的目录
Log_Path=$Backup_Dir/logs #日志文件目录
Keep_Incbackup=3 #保留的增量备份天数,此处要加e1; 如要保留2个,此处要写3
Keep_Fullbackup=8 #保留的全备份天数,此处要加1; 如要保留2个,此处要写3
#Mysql_Conf=/etc/my.cnf #mysql配置文件
Mysql_Conf=/etc/mysql/mysql.conf.d/mysqld.cnf
Mysql_Opts='--host=localhost --user=backup --password=ddblock!@#$backup' #mysql的连接配置,按需修改
Error()
{
echo -e "\e[1;31m$1\e[0m" 1>&2
exit 1
}
Backup()
{
#两个参数为全量备份,第一个参数为备份目录,第二个参数为日志全路径
if [ $# = 2 ] ; then
$Innobackupex_Path --defaults-file=$Mysql_Conf $Mysql_Opts --no-timestamp $1/full_$Bak_Time>$2 2>&1
#三个参数为增量备份,第一个为增量备份目录,第二个为上个增量备份目录,第三个为日志全路径
elif [ $# = 3 ];then
$Innobackupex_Path --defaults-file=$Mysql_Conf $Mysql_Opts --no-timestamp --incremental $1/incr_$Bak_Time --incremental-basedir $2 >$3 2>&1
else
Error "Backup(): 参数不正确"
fi
}
#获得某个目录下,最近修改的目录
Lastest_Dir()
{
if [ -d $1 ]; then
path=`ls -t $1 |head -n 1`
if [ $path ]; then
echo $path
else
Error "Lastest_Diri(): 目录为空,没有最新目录"
fi
else
Error "Latest_Dir(): 目录不存在或者不是目录"
fi
}
#进行增量备份
Do_Inc()
{
if [ "$(ls -A $Incrbackup_Path)" ] ; then
#不是第一次增量备份,以最新的增量备份目录为base_dir
Backup $Incrbackup_Path $Incrbackup_Path/`Lastest_Dir $Incrbackup_Path` $Log_Path/incr_$Bak_Time.log
else
#第一次增量备份要先全量备份
Backup $Incrbackup_Path $Log_Path/incr_full_$Bak_Time.log
fi
#保存最新*天的备份
cd $Incrbackup_Path/../../
ls -t |tail -n +$Keep_Incbackup |xargs rm -rf
}
#进行全量备份
Do_Full()
{
Backup $Fullbackup_Path $Log_Path/full_$Bak_Time.log
cd $Fullbackup_Path/../
ls -t |tail -n +$Keep_Fullbackup |xargs rm -rf
}
#环境和配置检查
Check()
{
#检查目录和创建目录
if [ ! -d $Fullbackup_Path ];then
mkdir -p $Fullbackup_Path
fi
if [ ! -d $Incrbackup_Path ];then
mkdir -p $Incrbackup_Path
fi
if [ ! -d $Log_Path ];then
mkdir -p $Log_Path
fi
#检测所需的软件
if [ ! -f $Innobackupex_Path ];then
Error "未安装xtradbbackup或xtradbbackup路径不正确"
fi
if [ ! -f $Mysql_Client ];then
Error "未安装mysql客户端"
fi
if [ ! -f $Mysql_Conf ];then
Error "mysql配置文件路径不正确"
fi
#检查mysql的运行状态
if [ `netstat -tlnp |grep mysqld |wc -l` = 0 ];then
Error "MySQL没有运行"
fi
#验证mysql的用户和密码是否正确
if ! `echo 'exit' | $Mysql_Client -s $Mysql_Opts >/dev/null 2>&1` ; then
Error "提供的数据库连接配置不正确!"
fi
}
case $1 in
full)
Check
Do_Full
;;
inc)
Check
Do_Inc
;;
*)
echo "full 全量备份"
echo "inc 增量备份"
;;
esac
# 查看定时服务(使用service cron status看不到脚本执行情况)
sudo service cron status
# 启动服务:
service cron start
# 关闭服务:
service cron stop
# 重启服务:
service cron restart
# 重新载入配置:
service cron reload
# 编辑cron:crontab -e(编辑完后重新载入配置),
# 注意:backup.sh是指上述脚本
0 0 * * * /home/mysql/backup/backup.sh full
*/5 * * * * /home/mysql/backup/backup.sh inc
// TODO 待完善
4、恢复备份数据
# 注意:恢复后一定得重启数据库,否则部分事务未体现。最好事先停止数据库
摘抄自(https://www.cnblogs.com/nmap/p/6722400.html)
1、 备份恢复思路
将增量备份1、增量备份2…合并到完整备份,加到一起出来一个新的完整备份,将新的完整备份以拷贝的形式到数据库空目录(rm /var/lib/mysql/* -rf)
2、预备完整备份
xtrabackup把备份过程中可能有尚未提交的事务或已经提交但未同步数据文件的事务,写到xtrabackup_logfile文件,所以要先通过这个日志文件回滚,把未完成的事务同步到备份文件,保证数据文件处于一致性。
# innobackup --apply-log --redo-only 2015-02-08_11-56-48
2.1、合并第一个增量备份
# innobackupex --apply-log --redo-only /mysql_backup/2015-02-08_11-56-48/ --incremental-dir=mysql_backup/2015-02-08_12-16-06
2.2、 合并第二个增量备份
# innobackupex --apply-log --redo-only /mysql_backup/2015-02-08_11-56-48/ --incremental-dir=mysql_backup/2015-02-08_16-06-53
3、恢复完整备份(先清空/var/lib/mysql)
这时2015-02-08_11-56-48完整备份已经包含所有增量备份,可以通过查看checkpoints来核实
# innobackupex --defaults-file=/etc/mysql/mysql.conf.d/mysqld.cnf --copy-back /mysql_backup/2015-02-08_11-56-48/
4、修改恢复数据文件权限
# chown -R mysql.mysql /var/lib/mysql
5、启动MySQL,查看数据库恢复情况
# /etc/init.d/mysqld start
网友评论