二十四次课 2018-09-29

MySQL版本:

[root@server-lnmp ~]# mysql -v
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.6.35 MySQL Community Server (GPL)

MySQL环境变量

为了方便操作mysql,可以将mysql命令所在的路径加入环境变量。

[root@server-lnmp ~]> echo 'export PATH=/usr/local/mysql/bin:$PATH' >> ~/.bash_profile
[root@server-lnmp ~]> source ~/.bash_profile    ##或者exit退出重新登录也可以生效
[root@server-lnmp ~]> mysql -uroot        ##这样就可以直接使用mysql命令,不需要输入绝对路径来执行了
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
(省略n行...)
mysql> 

设置ROOT密码

初次设置密码

使用mysqladmin命令

[root@server-lnmp ~]> mysqladmin -uroot password '123456'
Warning: Using a password on the command line interface can be insecure. 
#输出只是一个警告信息,提示在命令行显示了密码,不安全
#实际密码已经设置好了
# -uroot 指定设置密码的用户为root  
# password '123456'  设置指定用户的密码为123456

测试进入MySQL命令行

先不使用密码看看是否能进入

[root@server-lnmp ~]> mysql -uroot
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
#错误提示:拒绝访问,没有输入密码,

使用 -p 选项指定正确的密码就可以进入了

[root@server-lnmp ~]> mysql -uroot -p123456
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
(省略n行...)
mysql>exit
Bye

[root@server-lnmp ~]> mysql -uroot -p   # -p选项不指定明文密码,可以交互式的输入密码,不会显示出来
Enter password:   #此处输入密码
(省略n行...)
mysql> exit
Bye

密码重置

当有时候忘记了MySQL的root用户密码的时候,可以按照以下方式来重置root用户的密码。

设置mysql 跳过密码验证

# 1:修改配置文件,增加一行配置:skip-grant
[root@server-lnmp ~]> echo 'skip-grant' >> /etc/my.cnf
[root@server-lnmp ~]> tail -1 /etc/my.cnf
skip-grant

# 2:重启mysql服务
[root@server-lnmp ~]> /etc/init.d/mysqld restart

# 3:这时不使用密码也可以进入MySQL的命令行了
[root@server-lnmp ~]> mysql -uroot
 (省略n行...)
mysql>

修改密码

以 mysql> 开头的行是输入的命令,实际命令不包含 mysql> ,

mysql>是mysql命令行的提示符,相当于shell命令行下的 “[root@server-lnmp ~]>“

mysql> use mysql;    #切换当前操作的数据库到mysql
Database changed


mysql> UPDATE user SET password=PASSWORD('test123456') WHERE user='root'; 
Query OK, 4 rows affected (0.00 sec)
Rows matched: 4  Changed: 4  Warnings: 0
# 修改root用户的密码为:test123456
# UPDATE 是mysql修改表的命令,具体含义在后面会解释。
# 第一个user是指的user表,
# SET 修改指定字段的值,
# password是user表中的一个字段
# PASSWORD()是一个mysql函数,用于将括号中的内容加密
# WHERE 附加操作条件
# user='root'   这里的user也是user表中的一个字段,

# 整条命令的含义就是将mysql库的user表中的password字段修改为test123456(加密的),
# 但是只有user字段为root才会修改

测试是否修改成功

# 1:退出mysql命令行
mysql> quit
Bye

# 2:删除刚才在/etc/my.cnf配置文件中添加的内容。
[root@server-lnmp ~]> sed -i 's/skip-grant//' /etc/my.cnf

[root@server-lnmp ~]> cat /etc/my.cnf
[mysqld]
port = 3306
basedir=/usr/local/mysql
datadir=/data/mysql/
socket=/tmp/mysql.sock
user=mysql
default-time-zone=system
default-storage-engine=InnoDB
log-error=/var/log/mysqld.log
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

# 3:重启mysql服务
[root@server-lnmp ~]> /etc/init.d/mysqld restart

# 4:使用修改后的密码进入mysql命令行
[root@server-lnmp ~]> mysql -uroot -p'test123456'
(省略n行...)
mysql> 

连接MySQL

连接本机的msyql

[root@server-lnmp ~]> mysql -uroot -p'test123456' 
(省略n行。。)
mysql> quit
Bye
[root@server-lnmp ~]# 

##-u选项指定使用哪个mysql用户进行登录,
##这里root用户是mysql的管理员用户,而不是CentOS的root用户

quit是mysql的命令行的退出命令, 也可以使用exit  或者Ctrl+d来退出MySQL命令行

连接指定ip的mysql

[root@server-lnmp ~]> mysql -uroot -p123456 -h10.1.1.28 -P3306
(省略n行...)
mysql> exit
Bye
# -h 选项用于指定目标ip ,-P 选项指定目标端口,
# 也可以不用 -P 选项,默认就是连接3306端口

通过socket文件连接mysql

[root@server-lnmp ~]> mysql -uroot -p123456 -S/tmp/mysql.sock
(省略n行...)
mysql> exit
Bye
# -S 选项指定sock文件路径

连接MySQL执行一条指定的mysql语句

[root@server-lnmp ~]> mysql -uroot -p123456 -e 'show databases'
Warning: Using a password on the command line interface can be insecure.
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+
[root@server-lnmp ~]> 

# -e 选项用于指定需要执行的mysql语句
# 这个操作不会进入mysql命令行,只会显示指定的mysql语句的输出
# 这个操作通常用于shell脚本中。

mysql常用命令

查询当前所有的数据库

[root@server-lnmp ~]> mysql -uroot -p123456
(省略n行...)
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+
# 这四个数据库,就是mysql初始化时创建的四个数据库
# 数据库下还包含很多的数据表

切换操作的数据库

只有当使用use切换到指定的数据库,才能对该数据库里面的表进行操作

mysql> use mysql;
Database changed

## use:切换数据库的命令, mysql:数据库名。

查看当前使用的数据库

mysql> select database();
+------------+
| database() |
+------------+
| mysql      |
+------------+
1 row in set (0.00 sec)

查看库里的表

mysql> show tables;
+---------------------------+
| Tables_in_mysql           |
+---------------------------+
| columns_priv              |
| db                        |
| event                     |
| func                      |
| general_log               |
| help_category             |
| help_keyword              |
| help_relation             |
| help_topic                |
| innodb_index_stats        |
| innodb_table_stats        |
| ndb_binlog_index          |
| plugin                    |
| proc                      |
| procs_priv                |
| proxies_priv              |
| servers                   |
| slave_master_info         |
| slave_relay_log_info      |
| slave_worker_info         |
| slow_log                  |
| tables_priv               |
| time_zone                 |
| time_zone_leap_second     |
| time_zone_name            |
| time_zone_transition      |
| time_zone_transition_type |
| user                      |
+---------------------------+
28 rows in set (0.00 sec)

# 以上就是mysql这个数据库中的所有的表了,

查看表结构

mysql> desc db;
+-----------------------+---------------+------+-----+---------+-------+
| Field                 | Type          | Null | Key | Default | Extra |
+-----------------------+---------------+------+-----+---------+-------+
| Host                  | char(60)      | NO   | PRI |         |       |
| Db                    | char(64)      | NO   | PRI |         |       |
| User                  | char(16)      | NO   | PRI |         |       |
(省略N行)
22 rows in set (0.00 sec)  #这里可以看出这个表有多少个字段,也就是多少列,

# Field:字段表示的是列名
# Type:字段表示的是列的数据类型
# Null :字段表示这个列是否能取空值
# Key :在mysql中key 和index 是一样的意思,这个Key列可能会看到有如下的值:PRI(主键)、MUL(普通的b-tree索引)、UNI(唯一索引)
# Default: 列的默认值
# Extra :其它信息

查看建表语句

mysql> show create  table func\G;
*************************** 1. row ***************************
       Table: func
Create Table: CREATE TABLE `func` (
  `name` char(64) COLLATE utf8_bin NOT NULL DEFAULT '',
  `ret` tinyint(1) NOT NULL DEFAULT '0',
  `dl` char(128) COLLATE utf8_bin NOT NULL DEFAULT '',
  `type` enum('function','aggregate') CHARACTER SET utf8 NOT NULL,
  PRIMARY KEY (`name`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='User defined functions'
1 row in set (0.00 sec)

ERROR: 
No query specified

\G的作用

\G 的作用是将mysql语句输出内容的每一行使用竖排显示

## 首先是使用了\G
mysql> select user,host from user\G;
*************************** 1. row ***************************
user: root
host: 127.0.0.1
*************************** 2. row ***************************
user: root
host: ::1
*************************** 3. row ***************************
user: 
host: localhost
*************************** 4. row ***************************
user: root
host: localhost
*************************** 5. row ***************************
user: 
host: server-lnmp
*************************** 6. row ***************************
user: root
host: server-lnmp
6 rows in set (0.00 sec)

ERROR: 
No query specified

## 不使用\G 的效果
mysql> select user,host from user;
+------+-------------+
| user | host        |
+------+-------------+
| root | 127.0.0.1   |
| root | ::1         |
|      | localhost   |
| root | localhost   |
|      | server-lnmp |
| root | server-lnmp |
+------+-------------+
6 rows in set (0.00 sec)

# 虽然这样看起来 \G 显示比较乱,
# 但是当输出的字段非常多的时候,这样操作后显示就会很清晰了

查看当前用户 select user();

mysql> select user();
+--------+
| user() |
+--------+
| root@  |
+--------+
1 row in set (0.00 sec)

创建库

mysql>  create database test001;
Query OK, 1 row affected (0.00 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
| test001            |
+--------------------+
5 rows in set (0.00 sec)

## create  可以用于创建数据库或者表。
## database 创建的是数据库
## test001  自定义的数据库名,或者是表名。

创建表

# 切换到刚才创建的数据库 test001
mysql>  use test001;
Database changed

# 创建表 test1,两个字段 id 和 name 不同的字段使用逗号分隔,
# int(4),表示4个字节的int数据类型, char(40)表示40个字节的char数据类型
mysql>  create table test1(`id` int(4), `name` char(40));
Query OK, 0 rows affected (0.01 sec)

# 查看数据库test001里面所有的表
mysql> show tables;
+-------------------+
| Tables_in_test001 |
+-------------------+
| test1             |
+-------------------+
1 row in set (0.00 sec)

#查看表 test1 的建表语句
mysql> show create table test1\G;
*************************** 1. row ***************************
       Table: test1
Create Table: CREATE TABLE `test1` (
  `id` int(4) DEFAULT NULL,
  `name` char(40) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1
1 row in set (0.00 sec)

ERROR: 
No query specified

查看当前数据库版本

mysql> select version();
+-----------+
| version() |
+-----------+
| 5.6.35    |
+-----------+
1 row in set (0.00 sec)

查看数据库状态

mysql> show status;
#输出内容太多,就不贴出来了。详细说明参考下面的链接

MySQL status详解

查看MySQL各种参数

mysql> show variables; 
#输出超多内容

mysql> show variables like 'max_connect%';  #like 表示进行模糊匹配
+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| max_connect_errors | 100   |
| max_connections    | 151   |
+--------------------+-------+
2 rows in set (0.00 sec)
#详细参数解释参考下面的链接

show variables 详解

修改参数

#将全局的max_connect_errors数值修改为1000
#此方式修改的参数只会在内存中生效, 重启mysql服务之后就会失效。
#如果需要永久生效,需要在/etc/my.cnf配置文件中进行定义
mysql> set global max_connect_errors=1000;
Query OK, 0 rows affected (0.00 sec)

mysql> show variables like 'max_connect_errors';
+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| max_connect_errors | 1000  |
+--------------------+-------+
1 row in set (0.00 sec)

查看操作队列

类似Linux中 ps 命令或者top命令

mysql> show processlist; 
+----+------+-----------+------+---------+------+-------+------------------+
| Id | User | Host      | db   | Command | Time | State | Info             |
+----+------+-----------+------+---------+------+-------+------------------+
| 11 | root | localhost | NULL | Query   |    0 | init  | show processlist |
+----+------+-----------+------+---------+------+-------+------------------+
1 row in set (0.00 sec)

#使用full,会在Info列显示更完整的操作
mysql> show full processlist;
+----+------+-----------+------+---------+------+-------+-----------------------+
| Id | User | Host      | db   | Command | Time | State | Info                  |
+----+------+-----------+------+---------+------+-------+-----------------------+
| 11 | root | localhost | NULL | Query   |    0 | init  | show full processlist |
+----+------+-----------+------+---------+------+-------+-----------------------+
1 row in set (0.00 sec)

mysql用户管理

创建用户-1

mysql> grant all on *.* to 'testuser1' identified by 'mypasswd';
Query OK, 0 rows affected (0.00 sec)

# grant命令用于创建用户和授权
# all 表示所有权限,可以指定select、update、insert、drop等等权限,多个权限用逗号分隔。
# on *.* 表示该用户只能操作哪个库的哪个表,例如,mysql库下的user表可以表示为 mysql.user
# to 'testuser1'   指定用户名为testuser1
# identified by 'mypasswd'  指定改用户的密码

创建用户-2

mysql> grant SELECT,UPDATE,INSERT on test001.* to 'testuser2'@'10.1.1.28' identified by '123456';
Query OK, 0 rows affected (0.00 sec)

# 创建用户testuser2
# 'testuser2'@'10.1.1.28'表示该用户只能在ip为10.1.1.28这个主机上登录,
# 如果指定用户名类似于 'user'@'%' , '%' 表示任何主机都可以登录
# 该用户只能操作test001数据库,
# 只拥有SELECT,UPDATE,INSERT三种操作的权限
# 用户密码为 123456
#创建任何主机都可以登录的用户
mysql> grant all on test001.* to 'testuser3'@'%' identified by '123456';
Query OK, 0 rows affected (0.00 sec)

查看当前用户的授权信息

当需要复制一个用户的时候,需要用到这个操作,

用这个操作输出的两条 GRANT命令,稍做修改后执行 ,就可以创建一个大致相同的用户

mysql> show grants;
+----------------------------------------------------------------------------------------------------------------------------------------+
| Grants for root@localhost                                                                                                              |
+----------------------------------------------------------------------------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY PASSWORD '*C1926D5D997DA514EC848311225F474C929C7894' WITH GRANT OPTION |
| GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION                                                                           |
+----------------------------------------------------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)

查看指定用户的授权信息

mysql> show grants for 'testuser3'@'%';
+----------------------------------------------------------------------------------------------------------+
| Grants for testuser3@%                                                                                   |
+----------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'testuser3'@'%' IDENTIFIED BY PASSWORD '*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9' |
| GRANT ALL PRIVILEGES ON `test001`.* TO 'testuser3'@'%'                                                   |
+----------------------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)

常用sql语句

查询操作

# 查询统计mysql库中,user表有多少条数据
mysql> select count(*) from mysql.user;
+----------+
| count(*) |
+----------+
|        9 |
+----------+
1 row in set (0.00 sec)

# 查看mysql库db表的全部数据
mysql> select * from mysql.db;
+-----------+---------+-----------+-------------+-------------+-------------+-------------+-------------+-----------+------------+-----------------+------------+------------+-----------------------+------------------+------------------+----------------+---------------------+--------------------+--------------+------------+--------------+
| Host      | Db      | User      | Select_priv | Insert_priv | Update_priv | Delete_priv | Create_priv | Drop_priv | Grant_priv | References_priv | Index_priv | Alter_priv | Create_tmp_table_priv | Lock_tables_priv | Create_view_priv | Show_view_priv | Create_routine_priv | Alter_routine_priv | Execute_priv | Event_priv | Trigger_priv |
+-----------+---------+-----------+-------------+-------------+-------------+-------------+-------------+-----------+------------+-----------------+------------+------------+-----------------------+------------------+------------------+----------------+---------------------+--------------------+--------------+------------+--------------+
| %         | test    |           | Y           | Y           | Y           | Y           | Y           | Y         | N          | Y               | Y          | Y          | Y                     | Y                | Y                | Y              | Y                   | N                  | N            | Y          | Y            |
| %         | test\_% |           | Y           | Y           | Y           | Y           | Y           | Y         | N          | Y               | Y          | Y          | Y                     | Y                | Y                | Y              | Y                   | N                  | N            | Y          | Y            |
| 10.1.1.28 | test001 | testuser2 | Y           | Y           | Y           | N           | N           | N         | N          | N               | N          | N          | N                     | N                | N                | N              | N                   | N                  | N            | N          | N            |
| %         | test001 | testuser3 | Y           | Y           | Y           | Y           | Y           | Y         | N          | Y               | Y          | Y          | Y                     | Y                | Y                | Y              | Y                   | Y                  | Y            | Y          | Y            |
+-----------+---------+-----------+-------------+-------------+-------------+-------------+-------------+-----------+------------+-----------------+------------+------------+-----------------------+------------------+------------------+----------------+---------------------+--------------------+--------------+------------+--------------+
4 rows in set (0.00 sec)

# 查看mysql库db表中 db 字段的数据
mysql> select db from mysql.db;
+---------+
| db      |
+---------+
| test    |
| test001 |
| test\_% |
| test001 |
+---------+
4 rows in set (0.00 sec)

# 查看mysql库db表中 db 字段和 user 字段的数据
mysql> select db,user from mysql.db;
+---------+-----------+
| db      | user      |
+---------+-----------+
| test    |           |
| test001 | testuser3 |
| test\_% |           |
| test001 | testuser2 |
+---------+-----------+
4 rows in set (0.00 sec)

# 查看 msyql库db表中host,db,user三个字段的数据
# 但是只查看 host字段数据以 10.1. 开头的相关数据
mysql> select host,db,user from mysql.db where host like '10.1.%';
+-----------+---------+-----------+
| host      | db      | user      |
+-----------+---------+-----------+
| 10.1.1.28 | test001 | testuser2 |
+-----------+---------+-----------+
1 row in set (0.00 sec)

往表中插入数据

# 在test001库的test1表中插入一条数据 
# 第一个字段的数据为1 第二个字段的数据为'abc'
mysql> insert into test001.test1 values (1, 'abc');
Query OK, 1 row affected (0.01 sec)

查看刚插入的数据
mysql> select * from test001.test1;
+------+------+
| id   | name |
+------+------+
|    1 | abc  |
+------+------+
1 row in set (0.00 sec)

# insert into 为插入数据的固定格式
# test001.test1, 表示指定要插入数据的表, 也可以写当前所在数据的的表名
# values(v1,v2),  表示具体插入的数据, 默认重做往右,第一个数据对应第一个字段,以此类推。
# 也可以针对字段插入的数据,例如下面的语句
mysql> insert into test001.test1(name,id) values('ddd',2);
Query OK, 1 row affected (0.00 sec)

mysql> select * from test001.test1;
+------+------+
| id   | name |
+------+------+
|    1 | abc  |
|    2 | ddd  |
+------+------+
2 rows in set (0.00 sec)

#这个写法中 values的值是与前面表名指定的字段一一对应的

修改表数据

# 将 test001.test1表中 id 值为 1 所对应的 name 字段的值修改为 aaa
mysql> update test001.test1 set name='aaa' where id=1;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> select * from test001.test1;
+------+------+
| id   | name |
+------+------+
|    1 | aaa  |
|    2 | ddd  |
+------+------+
2 rows in set (0.00 sec)

删除表中指定数据

# 删除test001.test1表中name字段为 ddd 的记录
mysql> delete from test001.test1 where name = 'ddd';
Query OK, 1 row affected (0.00 sec)

mysql> select * from test001.test1;
+------+------+
| id   | name |
+------+------+
|    1 | aaa  |
+------+------+
1 row in set (0.00 sec)

清空表数据

# 首先给test001.test1表中插入多条数据
mysql> insert into test001.test1 values(2,'ddd'),(3,'eee'),(4,'fff');
Query OK, 3 rows affected (0.00 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> select * from test001.test1;
+------+------+
| id   | name |
+------+------+
|    1 | aaa  |
|    2 | ddd  |
|    3 | eee  |
|    4 | fff  |
+------+------+
4 rows in set (0.00 sec)

# 然后清空test001.test1表中的数据
mysql> truncate table test001.test1;
Query OK, 0 rows affected (0.01 sec)

mysql> select * from test001.test1;
Empty set (0.00 sec)

# 清空表的数据会保留表的结构,
# 查看test001.test1的表结构
mysql> show create table test001.test1;
+-------+--------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table                                                                                                             |
+-------+--------------------------------------------------------------------------------------------------------------------------+
| test1 | CREATE TABLE `test1` (
  `id` int(4) DEFAULT NULL,
  `name` char(40) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
+-------+--------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

删除表

# 删除test001.test1表
mysql> drop table test001.test1;
Query OK, 0 rows affected (0.01 sec)

# 切换到 test001 库
mysql> use test001;
Database changed
# 查看test001库里面的所有表,由于自由一个表,所以现在test001数据库已经空了;
mysql> show tables;
Empty set (0.00 sec)

#清空表和删除表的对比:
##清空表就好像将一个瓶子里装的水全部倒完,瓶子还在
##删除表则是将水和瓶子一起扔掉

删除数据库

# 删除test001数据库
mysql> drop database test001;
Query OK, 0 rows affected (0.00 sec)

# 查看数据库,test001已经不见了。
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+
4 rows in set (0.00 sec)

mysql数据库备份恢复

备份的操作都是在shell环境下操作的

备份和恢复只在于命令和定向符号的不同

备份和恢复库

#备份mysql库  ,备份一个库是将库里面所有的表和数据全部导出到一个文件中
[root@server-lnmp ~]> mysqldump -uroot -p'test123456' mysql > /tmp/mysql.sql
[root@server-lnmp ~]> ls -dlh /tmp/mysql.sql 
-rw-r--r--. 1 root root 638K Jul 13 01:43 /tmp/mysql.sql

# 恢复mysql库
##创建一个新的数据库,恢复库时,可以恢复到另外一个库里面
[root@server-lnmp ~]> mysql -uroot -p'test123456' -e 'create database test02'
##查看型数据库里面一个表也没有
[root@server-lnmp ~]> mysql -uroot -p'test123456' -e 'use test02;show tables;'| wc -l
0
##将刚才备份的mysql.sql 恢复到test02库
[root@server-lnmp ~]> mysql -uroot -p'test123456' test02 < /tmp/mysql.sql
##再看test02库里面的表与mysql库里面的表数量相同了
[root@server-lnmp ~]> mysql -uroot -p'test123456' -e 'use mysql;show tables;'| wc -l
29
[root@server-lnmp ~]> mysql -uroot -p'test123456' -e 'use test02;show tables;'| wc -l
29

备份表

# 备份mysql.user表 ,是将一个表的结构,和数据,包括表名一起导出到一个文件中
[root@server-lnmp ~]> mysqldump -uroot -p'test123456' mysql user > /tmp/user.sql

[root@server-lnmp ~]> ls -ldh /tmp/user.sql 
-rw-r--r--. 1 root root 6.7K Jul 13 01:55 /tmp/user.sql

# 恢复mysql.user表,恢复表的时候,只需要指定 库名 就可以了
[root@server-lnmp ~]> mysql -uroot -p'test123456' -e 'create database test03'

[root@server-lnmp ~]> mysql -uroot -p'test123456' test03 < /tmp/user.sql

[root@server-lnmp ~]> mysql -uroot -p'test123456' -e 'use test03;show tables;'
+------------------+
| Tables_in_test03 |
+------------------+
| user             |
+------------------+

备份所有库

# 备份所有库 是将这个mysql服务器所有的库的表和数据都导出到一个文件中
[root@server-lnmp ~]> mysqldump -uroot -p'test123456' -A >/tmp/mysql_all_bak.sql

[root@server-lnmp ~]> ls -ldh /tmp/mysql_all_bak.sql
-rw-r--r--. 1 root root 1.3M Jul 13 02:32 /tmp/mysql_all_bak.sql

表结构与表数据分开备份

# 只导出表结构 
[root@server-lnmp ~]> mysqldump -uroot -p'test123456' -d mysql user > /tmp/mysql_user_t.sql
[root@server-lnmp ~]> ls -ldh /tmp/mysql_user_t.sql 
-rw-r--r--. 1 root root 4.5K Jul 13 02:34 /tmp/mysql_user_t.sql

# 只导出表中的数据 
[root@server-lnmp ~]> mysqldump -uroot -p'test123456' -t mysql user > /tmp/mysql_user_v.sql
[root@server-lnmp ~]> ls -ldh /tmp/mysql_user_v.sql 
-rw-r--r--. 1 root root 3.4K Jul 13 02:35 /tmp/mysql_user_v.sql

# 恢复表结构
##创建一个新的数据库
[root@server-lnmp ~]> mysql -uroot -p'test123456' -e 'create database test04'
##恢复表结构
[root@server-lnmp ~]> mysql -uroot -p'test123456' test04 < /tmp/mysql_user_t.sql
##参看新表的结构
[root@server-lnmp ~]> mysql -uroot -p'test123456' -e 'show create table test04.user\G'
*************************** 1. row ***************************
       Table: user
Create Table: CREATE TABLE `user` (
  `Host` char(60) COLLATE utf8_bin NOT NULL DEFAULT '',
  `User` char(16) COLLATE utf8_bin NOT NULL DEFAULT '',
  `Password` char(41) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL DEFAULT '',
  `Select_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Insert_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Update_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Delete_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Create_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Drop_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Reload_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Shutdown_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Process_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `File_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Grant_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `References_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Index_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Alter_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Show_db_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Super_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Create_tmp_table_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Lock_tables_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Execute_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Repl_slave_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Repl_client_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Create_view_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Show_view_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Create_routine_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Alter_routine_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Create_user_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Event_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Trigger_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Create_tablespace_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `ssl_type` enum('','ANY','X509','SPECIFIED') CHARACTER SET utf8 NOT NULL DEFAULT '',
  `ssl_cipher` blob NOT NULL,
  `x509_issuer` blob NOT NULL,
  `x509_subject` blob NOT NULL,
  `max_questions` int(11) unsigned NOT NULL DEFAULT '0',
  `max_updates` int(11) unsigned NOT NULL DEFAULT '0',
  `max_connections` int(11) unsigned NOT NULL DEFAULT '0',
  `max_user_connections` int(11) unsigned NOT NULL DEFAULT '0',
  `plugin` char(64) COLLATE utf8_bin DEFAULT 'mysql_native_password',
  `authentication_string` text COLLATE utf8_bin,
  `password_expired` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  PRIMARY KEY (`Host`,`User`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='Users and global privileges'



# 恢复表数据
##查看新表里面是否有数据
[root@server-lnmp ~]> mysql -uroot -p'test123456' -e 'select * from test04.user'
Warning: Using a password on the command line interface can be insecure.
[root@server-lnmp ~]> 
####没有数据

##恢复
[root@server-lnmp ~]> mysql -uroot -p'test123456' test04  < /tmp/mysql_user_v.sql

##再查看表里面已经有数据了
[root@server-lnmp ~]> mysql -uroot -p'test123456' -e 'select user from test04.user'
Warning: Using a password on the command line interface can be insecure.
+-----------+
| user      |
+-----------+
| testuser1 |
| testuser3 |
| testuser2 |
| root      |
| root      |
|           |
| root      |
|           |
| root      |
+-----------+

扩展

mysql5.7 root密码更改

myisam 和innodb引擎对比

mysql 配置详解

mysql调优

同学分享的亲身mysql调优经历

SQL语句教程

什么是事务?事务的特性有哪些

根据binlog恢复指定时间段的数据

mysql字符集调整

猜你喜欢

转载自blog.csdn.net/u013946328/article/details/82891830