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

2023-05-16

一、数据库安装

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MySQL数据库安装、全量备份、增量备份与恢复 的相关文章

  • Linux下安装、配置、启动Apache

    环境 Centos 6 5 64位操作系统 安装Apache前准备 xff1a 1 检查该环境中是否已经存在httpd服务的配置文件 xff0c 默认存储路径 xff1a etc httpd httpd conf xff08 这是cento
  • 我从来没有得到过你,却好像已经失去了你千万次。

    为什么从来没有得到的东西 xff0c 也会让人有一种失去的感觉 xff1f 如题 xff01 xff01
  • power yourself

    1 不要做繁琐的计划 2 远离魔鬼 躲避诱惑 3 保持早睡早起的习惯 4 记录自己的成长轨迹 5 选择性离开网络世界
  • 希望余生尽早开始

    我爱你在暖和的天气感冒 我爱你用一小时来点菜 我爱你皱着眉头看我 好像我是疯子一样 我爱跟你分别后 仍然萦绕不散的余香 我想在睡前和你聊天 我来这 并不是因为我寂寞 也不是因为今天是除夕 是因为发现 如果你想要与某人共度余生 那你就会希望余
  • 又一年--在深圳

    一晃再晃 xff1b 一拖再拖 xff1b 我还是独自一个人奋战 xff0c 在这座繁华都市 严重的错觉就是 xff0c 总以为自己不想加班 xff0c 却发现只有加班的日子才过的充实 xff0c 也许事不知道业余时间该干嘛 这一年 xff
  • 2014华为校招机试高级题——if语法中的括号判断

    http blog csdn net wy4649 article details 11725073 package com huawei job import java util ArrayList import java util Sc
  • IntelliJ IDEA 2022.3.2 (Community Edition)中应用kotlin的android扩展

    前几天 xff0c 突然想试试在android上如何启用一个app xff0c 于是经过选择 xff0c 选择了kotlin语言来实现 网上说要先安装intellij idea的环境 xff0c 安装好后 xff0c 按照helloworl
  • 测试开发工程师面试题目

    测试开发工程师面试题目 1 什么是兼容性测试 兼容性测试侧重哪些方面 主要检验的是软件的可移植性 xff0c 检查软件在不同的硬件平台软件平台上是否可以正常的运行 细分会有 xff1a 平台的兼容 xff0c 网络兼容 xff0c 数据库兼
  • 操作系统经典书籍推荐

    推荐原则 xff1a 宁缺勿滥 xff0c 决不混进糟粕 好书不一定对所有人都合适 xff0c 但对于它的目标读者群来说 xff0c 一定是好书 选书原则 xff1a 有国外的 xff0c 不看国产的 有原版的 xff0c 不看翻译的 看大
  • JS删除JSON数组中的元素的两种方法:delete和splice

    最近的需求中 xff0c 需要从JSON数组中删除元素 xff0c 之前不太了解 xff0c 特地查了一下 xff0c 总结一下 xff1a splice startIndex count 这个方法用于从数组的第startIndex位开始
  • 算法-把二叉树打印成多行

    题目描述 从上到下按层打印二叉树 xff0c 同一层结点从左至右输出 每一层输出一行 span class token keyword package span niuke span class token punctuation span
  • 利用 mstsc 实现Windows局域网内远程桌面连接

    实验类型 xff1a 验证性 实验学时 xff1a 2 学时 一 实验目的 1 理解远程桌面连接的概念和原理 2 掌握配置 使用 Windows 远程桌面功能的方法 xff0c 能够使用 远程桌面 功能访问远程主机 3 通过本实验使学生认识
  • 详解CheckStyle的检查规则(共138条规则)

    本文主要介绍CheckStyle 5 6 1版本的各个规则配置项目 xff0c 这个版本的CheckStyle将样式规则分为了以下十七种类型 xff1a 1 Annotations xff08 注解 xff1a 5个 xff09 Annot
  • UG NX二次开发(C#)-建模-一键获取直线与坐标轴的夹角

    文章目录 1 前言 2 在UG NX中随便创建几条直线 3 在UG NX中的分析操作 4 UG NX二次开发实现 4 1 基本思路 4 2 创建基准坐标系 4 3 计算直线与轴向的夹角方法 4 4 添加调用方法 4 5 代码说明 5 测试效
  • 通过配置文件启用/禁用Ubuntu 18.04自动登录

    超级用户可以通过编辑custom conf配置文件的方式 xff0c 来为自己或任何其他 Ubuntu 用户启动自动登录 xff1a 1 xff0c 使用Ctrl 43 Alt 43 T快捷键打开 终端 2 xff0c 使用 vi nano
  • 秒杀系统的两种设计方案

    秒杀系统面临的挑战 秒杀活动和类似的抢购活动中 用户会在短时间内集中操作 后台系统可能在一瞬间面临平时几十倍甚至上百倍的并发请求 如果后台系统没有没有足够的冗余资源的话 系统可能被一瞬间搞瘫痪 如何应对短时间内的请求洪峰 让系统正常工作 是
  • edge浏览器安装扩展插件报错:出现错误Download interrupted

    文章目录 方法一方法二 方法一 如果使用方法一 xff0c 一定将前面的 去掉 1 打开host文件 xff1a C Windows System32 drivers etc 2 在hosts文件里面最后面 xff0c 添加 xff08 不
  • VS2022:如何在一个项目里写多个cpp文件并可以分别独立运行

    比如说有cpp01 和cpp02 两个文件 xff0c 你只想编译cpp02 1 注释函数名 将cpp01文件里的int main 改成 int main01 这种 xff0c 编译器就会只执行 02里面的main xff09 函数了 2
  • lubuntu开机自动登录

    sudo leafpad usr share lightdm lightdm conf d 20 lubuntu conf Seat user session 61 Lubuntu 原有 autologin user 61 username
  • 应用程序无法正常启动(0xC0000142)

    文章目录 应用程序无法正常启动 xff0c 错误代码0xc0000142 xff0c 造成的原因通常是因为部分DLL文件未能被系统注册 xff0c 导致动态库调用错误 解决方法 xff1a 将DLL文件重新注册一遍 1 按win 43 R调

随机推荐