热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Mysql完全备份案例

首先建立信息数据库client,数据表user_info,表结构

首先建立信息数据库client,数据表user_info,表结构

Mysql完全备份案例 - 文章图片

 

 

创建数据及表,录入数据:

[root@localhost ~]# mysql -uroot -p123456

mysql> show variables like 'character_set_%';

+--------------------------+----------------------------------+

| Variable_name            | Value                            |

+--------------------------+----------------------------------+

| character_set_client     | utf8                             |

| character_set_connection | utf8                             |

| character_set_database   | latin1                           |

| character_set_filesystem | binary                           |

| character_set_results    | utf8                             |

| character_set_server     | latin1                           |

| character_set_system     | utf8                             |

| character_sets_dir       | /usr/local/mysql/share/charsets/ |

+--------------------------+----------------------------------+

8 rows in set (0.11 sec)

 

mysql> exit

 

[root@localhost ~]# vim /etc/my.cnf

 

[mysqld]

datadir=/usr/local/mysql/data

socket=/tmp/mysql.sock

symbolic-links=0

default-storage-engine = INNODB

character-set-server = utf8

collation-server = utf8_general_ci

 

[client]

default-character-set = utf8

 

[mysqld_safe]

log-error=/usr/local/mysql/data/mysql.log

pid-file=/usr/local/mysql/data/mysql.pid

 

[root@localhost ~]# systemctl restart mysqld.service

[root@localhost ~]# mysql -uroot -p123456

mysql> show variables like 'character_set_%';

+--------------------------+----------------------------------+

| Variable_name            | Value                            |

+--------------------------+----------------------------------+

| character_set_client     | utf8                             |

| character_set_connection | utf8                             |

| character_set_database   | utf8                             |

| character_set_filesystem | binary                           |

| character_set_results    | utf8                             |

| character_set_server     | utf8                             |

| character_set_system     | utf8                             |

| character_sets_dir       | /usr/local/mysql/share/charsets/ |

+--------------------------+----------------------------------+

8 rows in set (0.00 sec)

 

mysql> exit

 

mysql> create database client;

Query OK, 1 row affected (0.00 sec)

 

mysql> use client;

Database changed

mysql> create table user_info(身份证 int(20),姓名 char(20),性别 char(2),用户ID号 int(110),资费 int(10));

Query OK, 0 rows affected (0.01 sec)

 

mysql> insert into user_info values('000000001','孙空武','男','011','100');

Query OK, 1 row affected (0.01 sec)

 

mysql> insert into user_info values('000000002','蓝凌','女','012','98');

Query OK, 1 row affected (0.01 sec)

 

mysql> insert into user_info values('000000003','姜纹','女','013','12');

Query OK, 1 row affected (0.00 sec)

 

mysql> insert into user_info values('000000004','关园','男','014','38');

Query OK, 1 row affected (0.01 sec)

 

mysql> insert into user_info values('000000004','罗中昆','男','015','39');

Query OK, 1 row affected (0.01 sec)

 

mysql> select * from user_info;

+-----------+-----------+--------+-------------+--------+

| 身份证    | 姓名      | 性别   | 用户ID号    | 资费   |

+-----------+-----------+--------+-------------+--------+

|         1 | 孙空武    | 男     |          11 |    100 |

|         2 | 蓝凌      | 女     |          12 |     98 |

|         3 | 姜纹      | 女     |          13 |     12 |

|         4 | 关园      | 男     |          14 |     38 |

|         4 | 罗中昆    | 男     |          15 |     39 |

+-----------+-----------+--------+-------------+--------+

5 rows in set (0.17 sec)

 

完整备份client.user_info表:

[root@localhost ~]#mkdir backup

[root@localhost ~]# mysqldump -uroot -p123456 client user_info > backup/client.user_info-$(date +%Y%m%d).sql

模拟数据丢失恢复数据:

[root@localhost ~]# mysql -uroot -p123456 -e 'drop table client.user_info;'

[root@localhost ~]# mysql -uroot -p123456 -e 'use client; show tables;'

[root@localhost ~]# mysql -uroot -p123456 client

[root@localhost ~]# mysql -uroot -p123456 -e 'select * from client.user_info;'

+-----------+-----------+--------+-------------+--------+

| 身份证    | 姓名      | 性别   | 用户ID号    | 资费   |

+-----------+-----------+--------+-------------+--------+

|         1 | 孙空武    | 男     |          11 |    100 |

|         2 | 蓝凌      | 女     |          12 |     98 |

|         3 | 姜纹      | 女     |          13 |     12 |

|         4 | 关园      | 男     |          14 |     38 |

|         4 | 罗中昆    | 男     |          15 |     39 |

+-----------+-----------+--------+-------------+--------+

 

定期备份数据:

[root@localhost ~]# which mysqldump

/usr/local/mysql/bin/mysqldump

[root@localhost ~]# vim /opt/bak_client.sh

#!/bin/bash

# 备份client.user_info表 脚本

/usr/local/mysql/bin/mysqldump -uroot -p123456 client user_info >backup/client.user_info-$(date +%Y%m%d).sql

 

[root@localhost ~]# chmod +x /opt/bak_client.sh

[root@localhost ~]# crontab -e

0       0       *       *       *       /opt/bak_client.sh     

 

MySQL数据库备份脚本

实验环境:

mysql-server:192.168.200.101   服务端

mysql-client:192.168.200.102    服务器

 

实验要求:对mysql-server的class库和client库实现异地备份,每天凌晨2:00进行备份,撰写一个数据恢复脚本。

MySQL服务端授权,给予select和lock tables权限,以备份

[root@localhost ~]# mysql -uroot -p123456

mysql> grant select,lock tables on class.* to 'root'@'192.168.200.11' identified by '123456';

Query OK, 0 rows affected (0.00 sec)

 

mysql> grant select,lock tables on client.* to 'root'@'192.168.200.11' identified by '123456';

Query OK, 0 rows affected (0.00 sec)

 

mysql> flush privileges;

Query OK, 0 rows affected (0.00 sec)

 

客户端安装客户端软件

[root@client ~]# yum -y install mysql

 

连接测试

[root@client ~]# mysql -uadmin -p -h192.168.200.10

mysql> show databases;

+--------------------+

| Database           |

+--------------------+

| information_schema |

| class              |

| client             |

 

撰写客户端备份脚本

[root@client ~]# vim /opt/bakmysql.sh

#!/bin/bash

# MySQL数据库备份脚本

# 设置登录变量

MY_USER="root"

MY_PASS="123456"

MY_HOST="192.168.200.10"

MY_COnN="-u$MY_USER -p$MY_PASS -h$MY_HOST"

# 设置备份的数据库

MY_DB1="class"

MY_DB2="client"

# 定义备份路径、工具、时间、文件名

BF_DIR="backup"

BF_CMD="/usr/bin/mysqldump"

BF_TIME=$(date +%Y%m%d-%H%M)

NAME_1="$MY_DB1-$BF_TIME"

NAME_2="$MY_DB2-$BF_TIME"

# 备份为.sql脚本,然后打包压缩(打包后删除原文件)

[ -d $BF_DIR ] || mkdir -p $BF_DIR

cd $BF_DIR

$BF_CMD $MY_CONN --databases $MY_DB1 > $NAME_1.sql

$BF_CMD $MY_CONN --databases $MY_DB2 > $NAME_2.sql

/bin/tar zcf $NAME_1.tar.gz $NAME_1.sql --remove &>/dev/null

/bin/tar zcf $NAME_2.tar.gz $NAME_2.sql --remove &>/dev/null

 

[root@client ~]# chmod +x /opt/bakmysql.sh

[root@client ~]# /opt/bakmysql.sh

[root@client ~]# ls backup/

class-20191012-1805.tar.gz  client-20191012-1805.tar.gz

[root@client ~]# crontab -e

0     2     *     *     *     /opt/bakmysql.sh

 

[root@client ~]#systemctl restart crond

[root@client ~]# /opt/bakmysql.sh

[root@client ~]# ls backup/

class-20191012-1805.tar.gz  client-20191012-1805.tar.gz

 

撰写数据恢复脚本

[root@client ~]# vim /opt/restore_mysql.sh

#!/bin/bash

# 恢复MySQL数据库数据脚本

# 设置变量

MY_USER="root"

MY_PASS="123456"

MY_HOST="192.168.200.10"

BF_DIR="backup"

mkdir .aaa

ls $BF_DIR |column -t > .aaa/db_list

awk -F'-' '{print $2}' .aaa/db_list > .aaa/dt.txt

read -p "请指定要恢复数据库的日期(YYYYMMDD):" dt

if [ $dt -ge 20191001 ] && [ $dt -le 20191031 ];then

       grep "$dt" .aaa/dt.txt &>/dev/null

       if [ $? -ne 0 ];then

              echo "很抱歉,您恢复数据库的备份日期不再备份日期范围内"

       else

              echo "搜索到的可恢复数据库如下:"

              awk -F'-' /$dt/'{print NR,$1}' .aaa/db_list

              read -p "请选择您要恢复数据库的编号: " nb

              nm=$(awk -F'-' /$dt/'{print NR,$1}' .aaa/db_list |awk /$nb/'{print $2}')

              echo "现在开始恢复数据库:$nm到$dt"

cd $BF_DIR

              Onm=$(ls |grep "$nm-$dt")

              mkdir .bbb

              tar xf $onm -C .bbb

&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; mysql -u$MY_USER -p$MY_PASS -h$MY_HOST $nm <.bbb/*

&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; echo "$nm已经恢复到$dt"

&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; rm -rf .bbb

&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; cd - &>/dev/null

&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; rm -rf .aaa

&#160;&#160;&#160;&#160;&#160;&#160;&#160; fi

else

echo "很抱歉,您恢复数据库的备份日期不再备份日期范围内"

fi

&#160;

[root@client ~]# chmod +x /opt/restore_mysql.sh

如在客户端恢复数据,需要开放权限

&#160;

mysql> grant all on class.* to &#39;root&#39;@&#39;192.168.200.11&#39;;

Query OK, 0 rows affected (0.00 sec)

&#160;

mysql> grant all on client.* to &#39;root&#39;@&#39;192.168.200.11&#39;;

Query OK, 0 rows affected (0.00 sec)

&#160;

mysql> flush privileges;

Query OK, 0 rows affected (0.00 sec)

&#160;

恢复测试:

[root@localhost ~]# /opt/restore_mysql.sh

mkdir: 无法创建目录".aaa": 文件已存在

请指定要恢复数据库的日期(YYYYMMDD):20191012&#160;

搜索到的可恢复数据库如下:

1 class

2 client

请选择您要恢复数据库的编号: 2&#160;&#160;&#160;&#160;

现在开始恢复数据库:client到20191012

mysql: [Warning] Using a password on the command line interface can be insecure.

ERROR 1044 (42000) at line 22: Access denied for user &#39;root&#39;@&#39;192.168.200.11&#39; to database &#39;client&#39;

client已经恢复到20191012

&#160;

[root@localhost ~]# /opt/restore_mysql.sh

请指定要恢复数据库的日期(YYYYMMDD):20191014

很抱歉,您恢复数据库的备份日期不再备份日期范围内


推荐阅读
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 本文介绍了Oracle数据库中tnsnames.ora文件的作用和配置方法。tnsnames.ora文件在数据库启动过程中会被读取,用于解析LOCAL_LISTENER,并且与侦听无关。文章还提供了配置LOCAL_LISTENER和1522端口的示例,并展示了listener.ora文件的内容。 ... [详细]
  • 关于我们EMQ是一家全球领先的开源物联网基础设施软件供应商,服务新产业周期的IoT&5G、边缘计算与云计算市场,交付全球领先的开源物联网消息服务器和流处理数据 ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • 本文介绍了在mac环境下使用nginx配置nodejs代理服务器的步骤,包括安装nginx、创建目录和文件、配置代理的域名和日志记录等。 ... [详细]
  • CentOS 6.5安装VMware Tools及共享文件夹显示问题解决方法
    本文介绍了在CentOS 6.5上安装VMware Tools及解决共享文件夹显示问题的方法。包括清空CD/DVD使用的ISO镜像文件、创建挂载目录、改变光驱设备的读写权限等步骤。最后给出了拷贝解压VMware Tools的操作。 ... [详细]
  • 本文讨论了在手机移动端如何使用HTML5和JavaScript实现视频上传并压缩视频质量,或者降低手机摄像头拍摄质量的问题。作者指出HTML5和JavaScript无法直接压缩视频,只能通过将视频传送到服务器端由后端进行压缩。对于控制相机拍摄质量,只有使用JAVA编写Android客户端才能实现压缩。此外,作者还解释了在交作业时使用zip格式压缩包导致CSS文件和图片音乐丢失的原因,并提供了解决方法。最后,作者还介绍了一个用于处理图片的类,可以实现图片剪裁处理和生成缩略图的功能。 ... [详细]
  • Todayatworksomeonetriedtoconvincemethat:今天在工作中有人试图说服我:{$obj->getTableInfo()}isfine ... [详细]
  • Python项目实战10.2:MySQL读写分离性能优化
    本文介绍了在Python项目实战中进行MySQL读写分离的性能优化,包括主从同步的配置和Django实现,以及在两台centos 7系统上安装和配置MySQL的步骤。同时还介绍了创建从数据库的用户和权限的方法。摘要长度为176字。 ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了logistic回归(线性和非线性)相关的知识,包括线性logistic回归的代码和数据集的分布情况。希望对你有一定的参考价值。 ... [详细]
  • MySQL语句大全:创建、授权、查询、修改等【MySQL】的使用方法详解
    本文详细介绍了MySQL语句的使用方法,包括创建用户、授权、查询、修改等操作。通过连接MySQL数据库,可以使用命令创建用户,并指定该用户在哪个主机上可以登录。同时,还可以设置用户的登录密码。通过本文,您可以全面了解MySQL语句的使用方法。 ... [详细]
  • 本文介绍了关系型数据库和NoSQL数据库的概念和特点,列举了主流的关系型数据库和NoSQL数据库,同时描述了它们在新闻、电商抢购信息和微博热点信息等场景中的应用。此外,还提供了MySQL配置文件的相关内容。 ... [详细]
  • 本文介绍了使用C++Builder实现获取USB优盘序列号的方法,包括相关的代码和说明。通过该方法,可以获取指定盘符的USB优盘序列号,并将其存放在缓冲中。该方法可以在Windows系统中有效地获取USB优盘序列号,并且适用于C++Builder开发环境。 ... [详细]
  • {moduleinfo:{card_count:[{count_phone:1,count:1}],search_count:[{count_phone:4 ... [详细]
author-avatar
手机用户2602931923_450
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有