mysql> create database test1;
Query OK, 1 row affected (0.00 sec)
mysql> create database test2 charset=utf8;
create database test2 character utf8;
Query OK, 1 row affected (0.00 sec)
mysql> create database test3 charset=utf8 collate=utf8_general_ci;
create database test3 character utf8 collate=utf8_general_ci;
Query OK, 1 row affected (0.00 sec)
上面的字符集2种方式都可以
一共创建了3个数据库:
字符集:数据库存储数据的编码集。
校验规则:数据库进行字段比较所用的编码集,也就是读取数据库时采用的编码集。
show charset;
show collation
cd /var/lib/mysql/数据库名
cat db.opt
我们再创建一个数据库,使用的校验规则采用区分大小写。
因此我们可以得出结论,创建数据库的字符集和校验集采用就近原则,如果不指定,就采用数据库默认的字符集和校验集。
可以看到test3采用的不区分大小写,查询出来的a大小写都有。
而对test4进行查询只能查到小写的。
因此字符集是存储时采用的一种编码格式,校验集是在读取数据库时进行字段比较时采用的一种编码规则。
mysql> show databases;//查看有什么数据库
+---------------------+
| Database |
+---------------------+
| information_schema |
| README_TO_RECOVER_A |
| jfhelloworld |
| mysql |
| performance_schema |
| sys |
| test1 |
| test2 |
| test3 |
| test4 |
+---------------------+
10 rows in set (0.00 sec)
mysql> show create database test1;//查看创建数据库时的语句
+----------+----------------------------------------------------------------+
| Database | Create Database |
+----------+----------------------------------------------------------------+
| test1 | CREATE DATABASE `test1` /*!40100 DEFAULT CHARACTER SET utf8 */ |
+----------+----------------------------------------------------------------+
1 row in set (0.00 sec)
mysql> select database();//查看当前正在使用哪个数据库
+------------+
| database() |
+------------+
| test4 |
+------------+
MySQL 建议我们关键字使用大写,但是不是必须的。
数据库名字的反引号 ``, 是为了防止使用的数据库名刚好是关键字
/*!40100 default.... */ 这个不是注释,表示当前mysql版本大于4.01版本,就执行这句话
mysql> alter database test3 collate utf8_bin;#修改校验规则
Query OK, 1 row affected (0.00 sec)
#删除数据库————本质是在/var/lib/mysql中删除一个目录
#不建议直接删除数据库,建议备份后删除
mysql> drop database database1;
Query OK, 0 rows affected (0.01 sec)
mysql> mysqldump -P 3306 -u root -p -B test3 > /home/wjw/test3.sql;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'mysqldump -P 3306 -u root -p -B test3 > /home/wjw/test3.sql' at line 1
注意,备份数据库的时候不能在mysql中使用,因为这是一个操作系统的bash。所以要退出数据库连接再使用。
我们先进入/var/lib/mysql目录下
使用指令
# mysqldump -P3306 -u root -p 密码 -B 数据库名 > 数据库备份存储的文件路径
[root@hcss-ecs-efdb mysql]# mysqldump -P 3306 -uroot -p -B test3 > /home/wjw/test3.sql
Enter password:
bash: test3.sql: line 1: syntax error near unexpected token `('
bash: test3.sql: line 1: `-- MySQL dump 10.13 Distrib 5.7.43, for Linux (x86_64)'
报错是因为还原指令是mysql的语句,不是bash。所以要先连接到数据库才行。
mysql> source /home/wjw/test3.sql;
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected, 1 warning (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 1 row affected (0.00 sec)
Database changed
Query OK, 0 rows affected (0.01 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.01 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 5 rows affected (0.01 sec)
Records: 5 Duplicates: 0 Warnings: 0
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected, 1 warning (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
实际上备份和恢复都是采用query的形式,也就是备份query语句,通过query再重新创建。
#仅备份几张张表
mysqldump -u root -p 数据库名 表名1 表名2 > D:/mytest.sql
#同时备份多个数据库
mysqldump -u root -p -B 数据库名1 数据库名2 ... > 数据库存放路径
记住是在mysql中查询。