1.显示secure_file_priv系统变量的值。
在linux终端提示符输入如下命令且收到结果显示:
# mysql -uroot -p -e"SHOW VARIABLES LIKE 'secure_file%'"
Enter password: oracle
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| secure_file_priv | NULL |
+------------------+-------+
这个secure_file_priv系统变量的值是null。这限制数据导入导出操作并阻止使用mysqldump和mysqlpump.
2.通过修改/etc/my.cnf文件来改变secure_file_priv系统变量的值为本地/backups目录。
编辑/etc/my.cnf内容读起来如下:
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
secure-file-priv=/backups
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
[client] socket=/var/lib/mysql/mysql.sock
3.重启mysql服务并核实现在secure_file_priv生效的新值。
在linux终端提示符输入如下命令并收到结果展示:
# service mysql restart
Shutting down MySQL.... [ OK ]
Starting MySQL. [ OK ]
# mysql -uroot -p -e"SHOW VARIABLES LIKE 'secure_file%'"
Enter password: oracle
+------------------+-----------+
| Variable_name | Value |
+------------------+-----------+
| secure_file_priv | /backups/ |
+------------------+-----------+
4.使用mysqldump工具,生成一个带tab分隔符的employees数据库备份到/backups目录里。
在linux终端提示符输入如下命令且收到结果展示:
# mysqldump -uroot -p --tab=/backups employees
Enter password: oracle
5.检查/backups目录内容。
在这个目录里有多少个.sql文件?
在这个目录里有多少个.txt文件?
在linux终端输入如下命令且收到结果显示:
# ls /backups -l
total 138224
-rw-r--r-- 1 root root 1464 date-time departments.sql
-rw-rw-rw- 1 mysql mysql 153 date-time departments.txt
-rw-r--r-- 1 root root 1747 date-time dept_emp.sql
-rw-rw-rw- 1 mysql mysql 11175033 date-time dept_emp.txt
-rw-r--r-- 1 root root 1767 date-time dept_manager.sql
-rw-rw-rw- 1 mysql mysql 816 date-time dept_manager.txt
-rw-r--r-- 1 root root 1547 date-time employees.sql
-rw-rw-rw- 1 mysql mysql 13821993 date-time employees.txt
drwxr-x--- 4 mysql mysql 4096 date-time meb1
-rw-r--r-- 1 root root 1608 date-time salaries.sql
-rw-rw-rw- 1 mysql mysql 98781181 date-time salaries.txt
-rw-r--r-- 1 root root 1615 date-time titles.sql
-rw-rw-rw- 1 mysql mysql 17718376 date-time titles.txt
在这个目录下有多少个.sql文件?答案:六,在employees数据库里每个表一个文件
在这个目录下有多少个.txt文件? 答案:六,在employees数据库里每个表一个文件
6.检查dept_manager.sql文件内容。
在linux终端提示符输入如下命令返回结果显示:
# more /backups/dept_manager.sql
-- MySQL dump 10.13 Distrib 5.7.17, for linux-glibc2.5 (x86_64) --
-- Host: localhost Database: employees
-- ------------------------------------------------------
-- Server version 5.7.17-enterprise-commercial-advanced-log
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Table structure for table `dept_manager` --
DROP TABLE IF EXISTS `dept_manager`;
/*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */;
CREATE TABLE `dept_manager` (
`dept_no` char(4) NOT NULL, `emp_no` int(11) NOT NULL, `from_date` date NOT NULL, `to_date` date NOT NULL,
PRIMARY KEY (`emp_no`,`dept_no`), KEY `emp_no` (`emp_no`),
KEY `dept_no` (`dept_no`),
CONSTRAINT `dept_manager_ibfk_1` FOREIGN KEY (`emp_no`) REFERENCES `employees` (`emp_no`) ON DELETE CASCADE,
CONSTRAINT `dept_manager_ibfk_2` FOREIGN KEY (`dept_no`) REFERENCES `departments` (`dept_no`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on ...
7.检查/backups/dept_manager.txt文件内容。这个文件是什么格式?
在linux终端提示符输入如下命令且收到结果展示:
# more /backups/dept_manager.txt
d001 110022 1985-01-01 1991-10-01
d001 110039 1991-10-01 9999-01-01
d002 110085 1985-01-01 1989-12-17
d002 110114 1989-12-17 9999-01-01
d003 110183 1985-01-01 1992-03-21
d003 110228 1992-03-21 9999-01-01
d004 110303 1985-01-01 1988-09-09
d004 110344 1988-09-09 1992-08-02
d004 110386 1992-08-02 1996-08-30
d004 110420 1996-08-30 9999-01-01
d005 110511 1985-01-01 1992-04-25
d005 110567 1992-04-25 9999-01-01
d006 110725 1985-01-01 1989-05-06
d006 110765 1989-05-06 1991-09-12
d006 110800 1991-09-12 1994-06-28
d006 110854 1994-06-28 9999-01-01
d007 111035 1985-01-01 1991-03-07
d007 111133 1991-03-07 9999-01-01
d008 111400 1985-01-01 1991-04-08
d008 111534 1991-04-08 9999-01-01
d009 111692 1985-01-01 1988-10-17
d009 111784 1988-10-17 1992-09-08
d009 111877 1992-09-08 1996-01-03
d009 111939 1996-01-03 9999-01-01
文件是什么格式的?答案:它是一个tab分隔符的文本文件。
8.在/backups创建一个子目录,名称为pump.
在linux终端提示符下输入如下命令且返回结果显示:
# mkdir /backups/pump # ls -l /backups
total 138220
-rw-r--r-- 1 root root 1460 date-time departments.sql
-rw-r--r-- 1 root root 1743 date-time dept_emp.sql
-rw-rw-rw- 1 mysql mysql 11175033 date-time dept_emp.txt
-rw-r--r-- 1 root root 1763 date-time dept_manager.sql
-rw-rw-rw- 1 mysql mysql 816 date-time dept_manager.txt
-rw-r--r-- 1 root root 1543 date-time employees.sql
-rw-rw-rw- 1 mysql mysql 13821993 date-time employees.txt
drwxr-x--- 4 mysql mysql 4096 date-time meb1
drwxr-xr-x 2 root root 4096 date-time pump
-rw-r--r-- 1 root root 1631 date-time salaries.sql
-rw-rw-rw- 1 mysql mysql 98781181 date-time salaries.txt
-rw-r--r-- 1 root root 1611 date-time titles.sql
-rw-rw-rw- 1 mysql mysql 17718376 date-time titles.txt
9.使用mysqlpump工具去备份employees数据库到/backups/pump目录里的一个名为pump.sql的sql脚本文件里。配合合适的参数进行mysqlpump以便使用5个线程来仅对employees数据库进行处理。
在linux终端提示符输入如下命令且返回结果显示:
# mysqlpump -uroot -p --databases employees \
> --default-parallelism=5 > /backups/pump/pump.sql
Enter password: oracle
Dump progress: 0/5 tables, 250/3469408 rows
Dump progress: 0/6 tables, 2524435/3896234 rows
Dump completed in 1928 milliseconds
10.核实mysqlpump创建的/backups/pump目录下的pump.sql文件。
在Linux终端提示符输入如下命令且返回结果展示:
# ls -al /backups/pump total 165084
drwxr-xr-x 2 root root 4096 date-time .
drwxr-xr-x 3 mysql mysql 4096 date-time ..
-rw-r--r-- 1 root root 169037412 date-time pump.sql
mysqlpump工具已经创建了一个单一脚本文件的备份。你可以通过执行它含的语句进行恢复。例如,使用mysql命令后客户端:
# mysql < pump.sql
注意:不要执行这个步骤,你随后将使用mysqlimport来恢复这个备份。
11.使用mysqladmin工具,创建一个名为emps2的新数据库。
在linux终端提示符输入如下命令且返回结果显示:
# mysqladmin -uroot -p create emps2
Enter password: oracle
12.使用mysql应用,为departments,employees,dept_manager表加载每个*.sql文件进入到第11步创建的emps2数据库的里。
在linux终端提示符输入如下命令且返回结果显示:
# cd /backups
# mysql -uroot -p emps2 < departments.sql
Enter password: oracle
# mysql -uroot -p emps2 < employees.sql
Enter password: oracle
# mysql -uroot -p emps2 < dept_manager.sql
Enter password: oracle
注意:你创建表dept_manager之前先创建departments和employees表,因为表dept_manager有外键依赖在departments和employees表。
13.使用mysqlimport工具,为表departments,employees,dept_mamager表加载每个*.txt文件。
在linux终端提示符输入如下命令并返回结果显示:
# mysqlimport -uroot -p emps2 /backups/departments.txt
Enter password: oracle
emps2.departments: Records: 10 Deleted: 0 Skipped: 0 Warnings: 0
# mysqlimport -uroot -p emps2 /backups/employees.txt
Enter password: oracle
emps2.employees: Records: 300024 Deleted: 0 Skipped: 0 Warnings: 0
# mysqlimport -uroot -p emps2 /backups/dept_manager.txt
Enter password: oracle
emps2.dept_manager: Records: 24 Deleted: 0 Skipped: 0 Warnings: 0
mysqlimport工具用文件名来决定导入数据行的到哪个相应的表。
注意:你导入数据行到dept_manager之前先要导入数据到departments和employees表,以致导入过程不会违反表dept_manager表的外键一致性。
14.使用mysql客户,检查emp2数据库里的表。
在linux终端提示符输入如下命令且返还结果显示:
# mysql -uroot -p
Enter password: oracle
Welcome to the MySQL monitor. Commands end with ; or \g.
...
在mysql提示符输入如下语句且返还结果显示:
mysql> USE emps2
...
Database changed
mysql> SHOW TABLES;
+-----------------+
| Tables_in_emps2 |
+-----------------+
| departments |
| dept_manager |
| employees |
+-----------------+
3 rows in set (#.## sec)
15.检查两个表emps2.employees和employees.employees记录总数来核实他们包含同样的行数。
在mysql提示符输入如下语句和返回结果显示:
mysql> SELECT COUNT(*) FROM emps2.employees;
+----------+
| count(*) |
+----------+
| 300024 |
+----------+
1 row in set(#.## sec)
mysql> SELECT COUNT(*) FROM employees.employees;
+----------+
| count(*) |
+----------+
| 300024 |
+----------+
1 row in set(#.## sec)
16.在两个数据库emps2和employees数据库检查departments和dept_manager表记录总数来核实各自表包含同样行数。
在mysql提示符输入如下语句且返回结果显示:
mysql> SELECT COUNT(*) FROM emps2.departments;
+----------+
| count(*) |
+----------+
| 10 |
+----------+
1 row in set(#.## sec)
mysql> SELECT COUNT(*) FROM employees.departments;
+----------+
| count(*) |
+----------+
| 10 |
+----------+
1 row in set(#.## sec)
mysql> SELECT COUNT(*) FROM emps2.dept_manager;
+----------+
| count(*) |
+----------+
| 24 |
+----------+
1 row in set(#.## sec)
mysql> SELECT COUNT(*) FROM employees.dept_manager;
+----------+
| count(*) |
+----------+
| 24 |
+----------+
1 row in set(#.## sec)
17.删除emps2数据库。
在mysql提示符输入如下语句且收到结果显示:
mysql> DROP DATABASE emps2;
Query OK, 3 rows affected (#.## sec)
18.离开mysql客户端会话。
在mysql提示符输入如下语句且返回结果显示:
mysql> EXIT
Bye
