MySQL实验九创建事件、数据库备份和恢复
文章目录
一实验目的
-
掌握 MySQL 中事件的概念;
-
熟悉事件的管理;
-
掌握事件的创建和修改;
-
掌握使用 mysqldump 工具备份数据库、数据表的方法;
-
掌握使用 mysql 还原数据库的方法;
-
掌握常用的数据导出方法;
-
使用事件定期导出表中的数据;
二实验平台
2.1 操作系统:
Windows XP,Windows Server 2003,Windows 7 或者 Windows 10;
2.2 数据库
MySQL Server 8.0,MySQL Workbench、phpMyAdmin、Navicat for mySQL、
MySQL 等客户端工具;
三实验内容和要求
任务中涉及的数据表是在员工医疗保险系统(实验 03)中给出的表。
3.1 创建事件
(1) 检查MySQL数据库服务器是否开启了事件,如果没有开启,先开启事件;
show variables like 'event_scheduler';
select @@event_scheduler;
show processlist;
-- 若没用开启事件
set global event_scheduler =ON;
(2) 在员工医疗保险系统(实验 03)数据库中,新建表 EventLog,该表至少
包含如下三个列:编号列,自动增长列,主键;事件名称列,记录被激活的事件
的名称;激活时间列,记录事件被激活的时间值。列名和列的数据类型自行设计;
-- (2)
create table EventLog (
id int auto_increment primary key comment '编号',
eventName varchar(20) comment '事件名称',
createTime datetime default current_timestamp comment '激活时间'
);
(3) 在员工医疗保险系统(实验 03)数据库中创建事件 uevent1,该事件于被
创建时间延后 4 分钟激活,事件中要执行的代码是将事件名称和激活时间等内容
插入到 EventLog 表中,写出创建该事件的代码;
-- (3)
create event if not exists uevent1
on schedule
at current_timestamp()+interval 4 minute
do insert into Eventlog (eventName) values ('uevent1激活');
(4) 在员工医疗保险系统(实验 03)数据库中创建事件 uevent2,该事件每隔
1 分钟执行一次,从当天的下午 4:20 开始,到 4:30 结束,事件中要执行的代码是
将事件名称和激活时间等内容插入到 EventLog 表中,写出创建该事件的代码;
-- (4)
create event if not exists uevent2
on schedule
every 1 minute
starts '2021-6-12 21:40:00'
ends '2021-6-12 21:50:00'
do insert into Eventlog (eventName) values ('uevent2激活');
(5) 在员工医疗保险系统(实验 03)数据库中创建事件 uevent3,该事件每隔
1 个季度执行一次,在每个季度的第一天的凌晨 1:00 点开始,事件中要执行的代
码是将事件名称和激活时间等内容插入到EventLog表中,写出创建该事件的代码;
创建完成上述三个事件后,查询 EventLog 表,看看相关的事件有没有被激活过。
-- (5)
create event if not exists uevent3
on schedule
every 1 quarter
starts '2021-1-1 1:00:00'
do insert into Eventlog (eventName) values ('uevent3激活');
3.2 备份数据库
(1) 使用 mysqldump 工具备份员工医疗保险系统(实验 03 创建的 7 个表)数
据库中的 business 表;备份的文件名为 backbusiness.sql;
遇到问题:
电脑装多个mysql服务出来error2003连接不上mysql服务的原因
所以加上了主机名端口来筛选出是哪个mysql服务
接着测试失败因为数据库名为中文的 db_test_学号
mysqldump -h127.0.0.1 -P3333 -uroot -p sakila actor >\backvysubess.sql
又因为数据库名字不能重命名只能备份后重新载入
故暂时采用另外创建一个数据库T把表复制过去并重新mysqldump备份下来
create database T character set utf8 collate utf8_general_ci;
select table_name from information_schema.tables where table_schema ='db_test_学号';
rename table db_test_学号.bussiness to T.bussiness;
mysqldump -h127.0.0.1 -P3333 -uroot -p T bussiness >\backbusiness.sql
注意:cmd命令提示符要用管理员身份打开
发现是一开始创建数据库名字db_test_学号搞错了 故
(2) 使用 mysqldump 工具备份员工医疗保险系统(实验 03 创建的 7 个表)数
据库,备份的文件名为 backdb03.sql;
-- 同上
(3) 使用 mysqldump 工具备份当前 MySQL 数据库服务器上的所有数据库,备
份的文件名为 backdall.sql;
-- 语句
mysqldump -u username -p --all-databases > BackupName.sql
-- 实例
mysqldump -h127.0.0.1 -P3333 -uroot -p --all-databases >\all.sql
完成上面的备份操作以后,检查备份生成的文件的内容。
3.3 使用 mysql 命令还原数据库
(1) 使用 mysql 命令把上面 3.2 备份的 business 表,还原到其他数据库中;
mysql -h127.0.0.1 -P3333 -uroot -p test1 <C:\Users\86134\Documents\dumps\Dump20210616
(2) 使用 mysql 命令还原上面 3.2 备份的员工医疗保险系统数据库;
(3) 使用 mysql 命令还原上面 3.2 备份的所有数据库;
每次执行还原后,检查还原后的结果。
3.4 表数据的导出
(1) 使用 Select…… Into outfile 导出员工医疗保险系统(实验 03 创建的 7 个
表)数据库中的 card 表中的全部数据,导出的文件名为 card.txt;
select * from card into outfile 'C:\Users\86134\Desktop\card.txt';
(2) 使用 mysqldump 命令导出员工医疗保险系统(实验 03 创建的 7 个表)数
据库中的 staff 表中的全部数据,导出的文件名为 staff.txt;
(3) 使用 mysql 命令导出员工医疗保险系统(实验 03 创建的 7 个表)数据库
中的 see 表中的全部数据,导出的文件名为 see.txt;
每次完成数据导出以后,查看导出的文件内容是否正确。
3.5 定期导出表数据
在每个月的第一天的凌晨 1 点钟,导出员工医疗保险系统(实验 03 创建的 7
个表)数据库中的 consume 表中的全部数据,导出的文件名为 consume_X.txt,其中
X 的值由导出的时间决定,例如导出时间是:‘2017-05-01 15:22:50’,则导出的文
件名为 consume_2017_05_01_15_22_50.txt;文件中字段之间用“,”隔开,字符型
数据用单引号括起来,每条记录占一行。(提示:先创建一个立即执行的事件,测
试该事件中的代码能否按要求导出表中的数据,再把该事件定义为根据上面要求
调度的事件。)