第十三章 MySQL常用操作

一、设置更改root密码
二、连接mysql
三、mysql常用命令
四、mysql用户管理
五、常用sql语句
六、mysql数据库备份恢复
七、扩展

一、设置更改root密码

1. 为了方便操作mysql,可以将mysql命令所在的路径加入环境变量(不加入需要使用绝对路径)。

[root@Linux01 ~]# export PATH=$PATH:/usr/local/mysql/bin/mysql      //将mysql命令所在的路径加入环境变量

想要永久生效,把命令放到配置文件/etc/profile中:

[root@Linux01 ~]# vim /etc/profile                           //编辑配置文件/etc/profile

[root@Linux01 ~]# source /etc/profile                     //使配置文件/etc/profile生效

问题:但是加入环境变量后还是显示未找到命令:

解决方法:

原因:这是由于系统默认会查找/usr/bin下的命令,如果这个命令不在这个目录下,当然会找不到命令,我们需要做的就是映射一个链接到/usr/bin目录下,相当于建立一个链接文件。
首先得知道mysql命令或mysqladmin命令的完整路径,比如mysql的路径是:/usr/local/mysql/bin/mysql,我们则可以这样执行命令:

# ln -s /usr/local/mysql/bin/mysql /usr/bin

再运行mysql就正常了:

2. 使用mysql命令(可以直接使用mysql命令,不需要输入绝对路径来执行了)

[root@Linux01 ~]# mysql -uroot

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

mysql>是mysql命令行的提示符,相当于shell命令行下的[root@Linux01 ~]# 

3. 设置ROOT密码

初次设置密码

使用mysqladmin命令

[root@Linux01 ~]# mysqladmin -uroot password '123456'

#输出只是一个警告信息,提示在命令行显示了密码,不安全

#实际上密码已经设置好了

# -uroot 指定设置密码的用户为root

# password '123456' 设置指定用户的密码为123456

4. 测试

①不输入密码:

[root@Linux01 ~]# mysql -uroot

#错误提示:拒绝访问,没有输入密码

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

[root@Linux01 ~]# mysql -uroot -p'123456'

③-p选项不指定明文密码,可以交互式的输入密码,不会显示出来

5. 修改密码

①更改已知的mysql密码

[root@Linux01 ~]# mysqladmin -uroot -p'123456' password 'Aa123456'

②不知道root密码或者mysql密码被遗忘,重置密码

a. 修改配置文件:

[root@Linux01 ~]# vim /etc/my.cnf
在【mysqld】下增加此内容:skip-grant  //忽略授权,不使用用户名密码,可以直接登录mysql

重启mysql服务,登录:

b. 更改密码

mysql> use mysql;    //切换当前操作的数据库到mysql

mysql> update user set password=password('123456') where user='root';    //修改root用户的密码为:123456


# updata 是mysql修改表的命令,具体含义在后面会解释。
# 第一个user是指的user表,
# set 修改指定字段的值,
# password是user表中的一个字段
# 后面的password()是一个mysql函数,用于将括号中的内容加密
# where 附加操作条件
# user='root'   这里的user也是user表中的一个字段,

# 整条命令的含义就是将mysql库的user表中的password字段修改为123456(加密的),但是只有user字段为root才会修改
c. 退出mysql,删除配置文件/etc/my.cnf中的skip-grant ,重启mysql服务

[root@Linux01 ~]# vim /etc/my.cnf
[root@Linux01 ~]#  /etc/init.d/mysqld restart
Shutting down MySQL.. SUCCESS! 
Starting MySQL. SUCCESS! 
d. 登录mysql

二、连接mysql

mysql主要有4种连接方式

1. 连接本机的msyql

[root@Linux01 ~]# mysql -uroot -p'123456'

-u选项指定使用哪个mysql用户进行登录,这里root用户是mysql的管理员用户,而不是系统的root用户 。quit是mysql的命令行的退出命令, 也可以使用exit 或者Ctrl+d来退出MySQL命令行

2. 连接指定ip和端口的mysql(模拟连接本机的)

[root@Linux01 ~]# mysql -uroot -p'123456' -h127.0.0.1 -P3306

-h 选项用于指定目标ip ,-P 选项指定目标端口;也可以不用 -P 选项,默认就是连接3306端口

3. 通过socket文件连接mysql(其实与第一种是一样的

[root@Linux01 ~]# mysql -uroot -p'123456' -S'/tmp/mysql.sock'

-S 选项指定sock文件路径

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

[root@Linux01 ~]# mysql -uroot -p'123456' -e 'show databases'

# -e 选项用于指定需要执行的mysql语句

# 这个操作不会进入mysql命令行,只会显示指定的mysql语句的输出

# 这个操作通常用于shell脚本中。

三、mysql常用命令

1. 查询库

mysql> show databases;

# 这四个数据库,就是mysql初始化时创建的四个数据库 ;数据库下还包含很多的数据表

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

mysql> use mysql;          //use:切换数据库的命令, mysql:数据库名。

3. 查看数据库里的表

mysql> show tables;

4. 查看表里的字段(desc tb_name;)

mysql>  desc user;

#在最后一行可以看出这个表有多少个字段,也就是多少列

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

5. 查看建表语句 show create table tb_name\G;

mysql>  show create  table func\G;                     \G代表横向显示 //如需建表时设定字符集,可以在create table语句后加上‘ENGINE=InnoDB DEFAULT CHARSET=utf8’,utf8替换为相应的字符集

6. 查看当前用户 select user();

mysql> select user();

7.  查看当前使用的数据库 select database();

mysql> select database();

8. 查看数据库版本 select version();

mysql> select version();

9. 查看数据库状态  show status;

mysql> show status;

MySQL status详解

10. 创建库  create database db1;

mysql> create database db1;

create 可以用于创建数据库或者表; database 创建的是数据库 ; db1 自定义的数据库名

11. 创建表 create table t1(`id` int(4), `name` char(40));

①切换到刚才创建的数据库 db1

②创建表 create table test1(`id` int(4), `name` char(40));

创建表 test1,两个字段 id 和 name 不同的字段使用逗号分隔;int(4),表示4个字节的int数据类型, char(40)表示40个字节的char数据类型

③查看数据库db1里面所有的表

mysql> show tables;

④查看表 test1 的建表语句

mysql> show create table test1\G;

//如需建表时设定字符集,可以在create table语句后加上‘ENGINE=InnoDB DEFAULT CHARSET=utf8’,utf8替换为相应的字符集

12. 查看MySQL各种参数

mysql> show variables;  //输出太多了,不截图

mysql> show variables like 'max_connect%';   //#like 表示进行模糊匹配,%号和like结合使用,%是通配符

show variables 详解

13. 修改参数

mysql> set global max_connect_errors=1000;

注:将全局的max_connect_errors数值修改为1000 ;此方式修改的参数只会在内存中生效, 重启mysql服务之后就会失效。如果需要永久生效,需要在/etc/my.cnf配置文件中的[mysqld]下添加相应的参数。

修改参数后,部分参数使用show variables;查看到的还是修改前的,需要使用show global variables;查看。

参考:https://www.cnblogs.com/azhqiang/p/5454000.html

14. 查看操作队列   , 类似Linux中 ps 命令或者top命令

使用full,会在Info列显示更完整的操作

mysql> show processlist; 
mysql> show full processlist;

四、mysql用户管理
mysql安装完以后默认只有一个root管理用户,最高权限。不利于安全管理。需要根据需要创建不同用户。

1. 创建用户user01并授予全部权限

mysql> grant all on *.* to 'user01' identified by '123456';


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

2. 创建用户user02并授予部分权限

mysql> grant SELECT,UPDATE,INSERT on db1.* to 'user02'@'192.168.239.128' identified by '123456789';

# 创建用户user02
# 'user02'@'192.168.239.128'表示该用户只能在ip为192.168.239.128的这个主机上登录,
# 如果指定用户名类似于 'user'@'%' , '%' 表示任何主机都可以登录
# 该用户只能操作db1数据库,
# 只拥有SELECT,UPDATE,INSERT三种操作权限
# 用户密码为 123456789

3. 创建任何主机都可以登录的用户

mysql> grant all on db1.* to 'user03'@'%' identified by '123456';

4.grant完要执行 FLUSH PRIVILEGES;

5. 使用创建用户登录

[root@Linux01 ~]# mysql -uuser01 -p'123456'

报错,不能登录。

原因:系统中存在空帐户导致,删除多余空帐户

[root@Linux01 ~]# mysql -uroot -p'123456'
mysql> use mysql;
mysql> select User,Password from user;
mysql> delete from user where user=' ';

mysql> FLUSH PRIVILEGES;  一定要执行

再次使用创建的账户登录

6. 因为user01有全部权限,不方便比较,所以切换到user02

7. 查看当前用户的授权信息

mysql> show grants;

查看指定用户授权切换到user01,因为只有user01有全部库的权限,可以查看到其他用户的加密密码,可以重新授权

mysql> show grants for 'user03'@'%';

8. 重新授权

如果遇到IP不够用,用户除了要在192.168.239.128上登录,还想在127.0.0.1这个IP的上登录,这时只需要把所有授权重新执行一次,把IP改成127.0.01即可。

验证用户user02使用127.0.0.1是否能登录:(不能登录)

查看user02用户的授权信息:

mysql> show grants for [email protected];

重新执行授权信息,把IP改成127.0.0.1

再次使用127.0.0.1登录

也可以用来修改密码,在重新执行授权命令时把密码改了(可以看到明文密码的情况下)。

注意:with grant option:这个语句是用来给其他用户授权。如果在grant时带了这个语句,user02就可以把SELECT,UPDATA,INSERT传递给其他用户;如果没带,就不能传递。

五、常用sql语句

1. 查询   //查询语句select

①查询统计mysql库中,user表有多少条数据;//count()函数统计行数

mysql> select count(*) from mysql.user;

②查看mysql库db表的全部数据

mysql> select * from mysql.db;

③查看mysql库db表中 db 字段的数据

mysql> select db from mysql.db;

④查看mysql库db表中 db 字段和 user 字段的数据

mysql> select db,user from mysql.db;

⑤查看 msyql库db表中host,db,user三个字段的数据 # 但是只查看 host字段数据以 192.168. 开头的相关数据

mysql> select host,db,user from mysql.db where host like '192.168.%';

2.插入

①在db1库的test1表中插入一条数据:第一个字段的数据为1 第二个字段的数据为'abc'

mysql> insert into db1.test1 values (1, 'abc');
mysql> select * from db1.test1;

②insert into 为插入数据的固定格式

db1.test1, 表示指定要插入数据的表, 也可以写当前所在数据的的表名 ; values(v1,v2), 表示具体插入的数据, 默认从左往右,第一个数据对应第一个字段,以此类推。

也可以针对字段插入的数据:              //这个写法中 values的值是与前面表名指定的字段一一对应的

mysql> insert into db1.test1(name,id) values('ddd',2);
mysql> select * from db1.test1;

3.更新(修改)表数据

将 db1.test1表中 id 值为 1 所对应的 name 字段的值修改为 aaa

mysql> update db1.test1 set name='aaa' where id=1;

4. 删除表中的记录和删除整张表

①删除表中的一条记录

删除db1.test1表中name字段为 ddd 的记录

mysql> delete from db1.test1 where name = 'ddd';

②删除整张表中的记录,但是表还在。(只是清空了数据,但是表结构还在)

mysql> truncate table db1.test1;

mysql> desc db1.test1;

③删除表,删除数据库都是极危险的操作(结构和数据一起被删除)。尽量少用,删除前一定要做备份

mysql> drop table test1;  //删除表

mysql> show tables;

mysql> drop database db1;  //删除库

show databases;

六、mysql数据库备份恢复

小规模数据库备份工具mysqldump,mysqldump备份方式是采用的逻辑备份,其最大的缺陷是备份和恢复速度较慢,如果数据库大于50G,mysqldump备份就不太适合。

备份的操作都是在shell环境下操作的;备份和恢复只在于命令和定向符号的不同。

1. 备份、恢复数据库(备份一个库是将库里面所有的表和数据全部导出到一个文件中

[root@Linux01 ~]# mysqldump -uroot -p123456 mysql >/tmp/mysql.sql           //备份mysql库

[root@Linux01 ~]# mysql -uroot -p123456 -e "create database mysql2"          //创建一个新的库mysql2

[root@Linux01 ~]#  mysql -uroot -p123456 mysql2 </tmp/mysql.sql                //把备份的库恢复到mysql2

查看新建的库和原库,里面内容一样,恢复成功:

2. 备份、恢复表(是将一个表的结构,和数据,包括表名一起导出到一个文件中

[root@Linux01 ~]# mysqldump -uroot -p123456 mysql2 user>/tmp/user.sql        //备份表
[root@Linux01 ~]# mysql -uroot -p123456 mysql2 </tmp/user.sql                        //恢复表

可以在备份后,进入mysql2,删除其中一个表,再恢复,验证是否恢复成功。

3. 备份所有的数据库(是将这个mysql服务器所有的库的表和数据都导出到一个文件中

[root@Linux01 ~]# mysqldump -uroot -p'123456' -A >/tmp/mysql_all_bak.sql

4. 表结构与表数据分开备份

①只备份、恢复表结构

[root@Linux01 ~]# mysqldump -uroot -p'123456' -d mysql user > /tmp/mysql_user_d.sql   //备份user表结构

[root@Linux01 ~]# mysql -uroot -p123456 -e "create database test007"                             //新建test007数据库

[root@Linux01 ~]# mysql -uroot -p'123456' test007 < /tmp/mysql_user_d.sql                     //恢复表结构到新建的库里

[root@Linux01 ~]# mysql -uroot -p'123456' -e 'show create table test007.user\G'              //查看新建test007库里的表结构

②只备份、恢复表中的数据

[root@Linux01 ~]# mysqldump -uroot -p'123456' -t mysql user > /tmp/mysql_user_v.sql        //备份表数据

[root@Linux01 ~]#  mysql -uroot -p'123456' -e 'select * from test007.user'                             //查看表里是否有数据

[root@Linux01 ~]# mysql -uroot -p'123456' test007  < /tmp/mysql_user_v.sql                       //恢复表数据

[root@Linux01 ~]# mysql -uroot -p'123456' -e 'select user from test007.user'                       //再次查看表里是否有数据

使用xtrabackup备份innodb引擎的数据库 innobackupex 备份:

http://wangxin123.com/2017/01/20/%E9%80%9A%E8%BF%87Percona%20Xtrabackup%E5%AE%9E%E7%8E%B0%E6%95%B0%E6%8D%AE%E7%9A%84%E5%A4%87%E4%BB%BD%E4%B8%8E%E6%81%A2%E5%A4%8D/

Xtrabackup 增量备份 :http://zhangguangzhi.top/2017/08/23/innobackex%E5%B7%A5%E5%85%B7%E5%A4%87%E4%BB%BDmysql%E6%95%B0%E6%8D%AE/#%E4%B8%89%E3%80%81%E5%BC%80%E5%A7%8B%E6%81%A2%E5%A4%8Dmysql

七、扩展

mysql5.7 root密码更改 http://ask.apelearn.com/question/7289
myisam 和innodb引擎对比 https://www.pureweber.com/article/myisam-vs-innodb/
mysql 配置详解: https://blog.linuxeye.cn/379.html
mysql调优: http://ask.apelearn.com/question/5758
同学分享的亲身mysql调优经历:http://ask.apelearn.com/question/11281
SQL语句教程 http://www.runoob.com/sql/sql-tutorial.html

什么是事务?事务的特性有哪些? https://blog.csdn.net/yenange/article/details/7556094
根据binlog恢复指定时间段的数据 https://blog.csdn.net/lilongsy/article/details/74726002
mysql字符集调整 http://blog.51cto.com/xjsunjie/1355013

猜你喜欢

转载自blog.csdn.net/dwy2018/article/details/85110991