一、设置更改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();
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里面所有的表
④查看表 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. 查看当前用户的授权信息
查看指定用户授权(切换到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
查看新建的库和原库,里面内容一样,恢复成功:
2. 备份、恢复表(是将一个表的结构,和数据,包括表名一起导出到一个文件中)
[root@Linux01 ~]# mysqldump -uroot -p123456 mysql2 user>/tmp/user.sql //备份表
[root@Linux01 ~]# mysql -uroot -p123456 mysql2
可以在备份后,进入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