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各种参数
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)
#详细参数解释参考下面的链接
修改参数
#将全局的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 |
+-----------+