MySQL数据库安装、全量备份、增量备份与恢复

一、数据库安装

Mysql数据库安装路径:/opt/mysql

Mysql数据库数据文件路径:/opt/mysql/data

Mysql数据库root用户登录密码:admin

1、安装MySQL之前先检查linux服务器上是否已经安装mariadb数据库

检查命令:yum list installed | grep mariadb

若有mariadb,需要先卸载,否则按照MySQL会冲突

卸载命令:yum -y remove mariadb*

2、上传MySQL安装包到linux服务器并解压

命令:tar -zxvf mysql-5.7.21-linux-glibc2.12-x86_64.tar.gz 

           mv mysql-5.7.31-el7-x86_64 mysql

3、为MySQL文件夹分配属组:

命令:chown -R mysql:mysql mysql

若出现如下错误,说明服务器上还没有mysql属组,需要先创建mysql属组:

4、创建保存数据库数据的文件夹

命令:cd /opt/mysql

           mkdir data

           chown mysql:mysql ./data/ 

           chmod 775 ./data/

5、创建配置文件

命令:cd /opt/mysql/support-files/

新建文件:vi my_default.cnf

       cp my_default.cnf /etc/my.cnf

6、设置开机启动

命令:cd /opt/mysql/support-files/

           cp mysql.server /etc/init.d/mysql

7、初始化数据库

命令:cd /opt/mysql/bin

           ./mysqld --initialize --user=mysql --basedir=/opt/mysql/ --datadir=/opt/mysql/data/

           cd /opt/mysql/data/

           cat mysqld.log

8、添加自动启动列表

命令:chkconfig --add mysql

           chkconfig --list

 9、登录数据库

命令:mysql -uroot -p

报错:bash:mysql:command not found ...

原因:由于系统默认会查找/usr/bin下的命令,如果这个命令不在这个目录下,当然会找不到命令,我们需要做的就是映射一个链接到/usr/bin 

 命令:ln -s /opt/mysql/bin/mysql /usr/bin

需要先启动数据库,再登录数据库

10、登录后进行数据库配置

修改密码:

mysql> set password=password('admin');

Query OK, 0 rows affected, 1 warning (0.00 sec)

 赋权操作:

mysql> grant all privileges on *.* to root@'%' identified by '123456' WITH GRANT OPTION;

Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> use mysql;

Reading table information for completion of table and column names

You can turn off this feature to get a quicker startup with -A

Database changed

mysql> update user set host='%' where user = 'root';(root表示想要被连接的数据库的用户名“%”表示允许所有机器能访问root用户

ERROR 1062 (23000): Duplicate entry '%-root' for key 'PRIMARY'

mysql> flush privileges;(必须使用flush privileges的两种情况1、改密码。2、授权超用户

Query OK, 0 rows affected (0.00 sec)

mysql> exit

Bye

数据库安装配置结束!!!

二、数据库全量备份

#备份全量文件-放置文件夹
BACKUP_DIR=/home/mysqlbackup/$(date +%Y%m%d)
#创建全量备份的文件夹
mkdir -p $BACKUP_DIR
#全量备份数据库
mysqldump  -uroot -padmin --quick --events --all-databases --flush-logs --delete-master-logs --single-transaction > $BACKUP_DIR/mysql.sql
#压缩全量备份文件
tar -zcvf $BACKUP_DIR/mysql.tgz $BACKUP_DIR/mysql.sql

echo "全量备份数据库成功"

--quick:不缓冲查询,直接导出到标准输出。默认为打开状态,使用--skip-quick取消该选项。

--events:导出事件

--all-databases:导出全部数据库

--flush-logs:

开始导出之前刷新日志。

请注意:假如一次导出多个数据库(使用选项--databases或者--all-databases),将会逐个数据库刷新日志。除使用--lock-all-tables或者--master-data外。在这种情况下,日志将会被刷新一次,相应的所以表同时被锁定。因此,如果打算同时导出和刷新日志应该使用--lock-all-tables 或者--master-data 和--flush-logs。

--delete-master-logs:master备份后删除日志. 这个参数将自动激活--master-data。

--single-transaction:该选项在导出数据之前提交一个BEGIN SQL语句,BEGIN 不会阻塞任何应用程序且能保证导出时数据库的一致性状态。它只适用于多版本存储引擎,仅InnoDB。本选项和--lock-tables 选项是互斥的,因为LOCK  TABLES 会使任何挂起的事务隐含提交。要想导出大表的话,应结合使用--quick 选项。

只备份某个数据库(如:test库)

mysqldump -u用户名 -p密码 数据库名 > 输出路径及sql文件名
  mysqldump -uroot -padmin test >/home/test.sql

三、数据库增量备份

1、修改数据库配置文件my.cnf

增加 binlog_format=MIXED内容,指定binlog格式

 2、编写增量备份脚本

#!/bin/bash

backup_dir=/home/mysqlbackup/binlog/$(date +%Y%m%d)
#创建增量备份的数据的保存文件夹
mkdir -p $backup_dir
# 设置mysql的登录用户名和密码(根据实际情况填写)
mysql_user="root"
mysql_password="admin"
mysql_port="3306"
#增量备份时复制mysql-bin.00000*的目标目录,提前手动创建这个目录

#mysql的index文件路径(依据自己的),binlog文件所处位置一般在mysql的data目录下
binlog_dir=/var/lib/mysql/data
binlog_index=$binlog_dir/mysql-bin.index
# 判断mysql实例是否正常运行
welcome_msg="start backup binlog, please wait..."
mysql_ps=`ps -ef |grep mysql |wc -l`
mysql_listen=`netstat -an |grep LISTEN |grep $mysql_port|wc -l`
if [ [$mysql_ps == 0] -o [$mysql_listen == 0] ]; then
        echo "$(date +'%Y-%m-%d %H:%M:%S'): ERROR:MySQL is not running! backup stop!"
        exit
else
        echo "$(date +'%Y-%m-%d %H:%M:%S'): $welcome_msg"
fi
#这个是用于产生新的mysql-bin.00000*文件(mysqladmin路径可以写全最好)
/usr/local/mysql/bin/mysqladmin -u$mysql_user -p$mysql_password flush-logs
# wc -l 统计行数
# awk 简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。
Counter=`wc -l $binlog_index |awk '{print $1}'`
NextNum=0
CopyNum=0
#这个for循环用于比对$Counter,$NextNum这两个值来确定文件是不是存在或最新的
for file in `cat $binlog_index`
do
    #basename用于截取mysql-bin.00000*文件名,去掉类似./mysql-bin.000005前面的./
    base=`basename $file`
    NextNum=`expr $NextNum + 1`
    # 跳过最新正在使用的日志
    if [ $NextNum -eq $Counter ]
    then
        echo `date +"%Y-%m-%d %H:%M:%S":` $base skip!
    else
        dest=$backup_dir/$base
        if(test -e $dest)
        #test -e用于检测目标文件是否存在,存在就写exist!到$logFile去
        then
            echo `date +"%Y-%m-%d %H:%M:%S":` $base exist!
        else
            cp $binlog_dir/$base $backup_dir
            CopyNum=`expr $CopyNum + 1`
            echo `date +"%Y-%m-%d %H:%M:%S":` $base copyed!
         fi
     fi
done
echo `date +"%Y-%m-%d %H:%M:%S":` $CopyNum new binlogs backup success!

其中:

backup_dir:备份文件存放路径

binlog_dir:binlog文件所处位置一般在mysql的data目录下

binlog_index=$binlog_dir/mysql-bin.index中mysql-bin.index对应my.cnf中的log-bin项,若my.cnf中log-bin=master-bin,则此处binlog_index=$binlog_dir/master-bin.index

mysqladmin命令填写绝对路径

四、设置服务器自动任务周期进行数据库备份

1、修改crontab -e

2、添加定时任务:

0 2 * * 3  bash  /home/mysqlBackUp.sh 
//每周三的2点进行数据库全量备份
0 4 * * *  bash  /home/mysqlbackup-detla/binlog_backup.sh
//每天的4点进行数据库增量备份

 数据库备份结束!!!

五、数据库恢复

1、全量备份恢复

使用 mysqldump 命令导出的 SQL 备份脚本,在进行数据恢复时可使用两种方法导入:

source命令:登录数据库,执行下述命令:

mysql> source /home/mysql.sql;

mysql命令:

mysql -uroot -padmin < /home/mysql.sql;

2、增量备份恢复

增量备份,备份的是mysql的data目录下的日志文件:mysql-bin.000123(数字部分根据实际情况)

查看增量备份的日志文件:

在mysql/bin目录下执行:./mysqlbinlog --no-defaults --base64-output=decode-rows -v /home/mysql/data/mysql-bin.000123(此处是备份的二进制日志的路径)

增量备份恢复:./mysqlbinlog --no-defaults 增量备份文件 | mysql -u 用户名 -p

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值