1.设置更改root密码
这里的root并不是Linux操作系统的用户,而是MySQL的超级管理员
1)首先启动MySQL服务
先查看ps aux |grep mysqld
如果没用启动/etc/init.d/mysqld start 来启动服务
2)mysql -uroot来对mysql进行一些操作,但是这个命令是在/usr/local/mysql/bin下的,并且/usr/local/mysql/bin没有在PATH中
所以我们来更改环境变量,export PATH=$PATH:/usr/local/mysql/bin;如果想要这个变量永久生效就把他加在/etc/profile中,然后再source /etc/profile
设置完成后,我们在来mysql -uroot可以发现access被denied了,这是因为之前安装的mysql5.7版本是有个临时密码的oSduCXnh!1Kf
我们在用mysql -uroot -p (这个参数是指密码) oSduCXnh!1Kf,就可以进入下面的页面了,如果想要退出则直接在方块处输入quite,回车即可
3)如果没有密码,可以用一下命令设置密码
mysqladmin -uroot password 'passwd'
如下图,我们把密码重置为 mysqladmin -uroot password '123456root'
4)之前的临时密码并不好记,我们如果想要重置密码,可以使用下面的命令
# mysqladmin -uroot -p 'old passwd' password 'new password'
所以如下图,我们就可以mysqladmin -uroot -p 'oSduCXnh!1Kf' password '123456root', 但是error: 'Your password has expired. To log in you must change it using a client that supports expired passwords.',那我们就通过忽略授权表的方式修改密码
5)通过忽略授权表的方式改密码
-
先编辑mysql的配置文件,vim /etc/my.cnf
-
在[mysqld]的第一行添加,skip-grant-tables来忽略密码认证
-
重启MySQL服务/etc/init.d/mysqld restart
-
重启后,mysql -uroot,进入页面来更改一个表
在最下面mysql>后面输入 use mysql
mysql> update user set authentication_string=PASSWORD('newpassword') where User='root';
-
再 vim /etc/my.cnf, 把skip-grant-tables注释掉,然后再重启MySQL服务
-
然后再实验新密码是否设置成功
mysql -uroot -p
如下图,设置成功
2.连接MySQL
1)连接本机
mysql -uroot -p,输入密码
2)连接远程
比如从A服务器去连接B服务器的MySQL
mysql -uroot -ppassward -h ip addr -Pport
3306端口为默认端口
3)使用socket通信方式连接,只适合本机,和第一种方式等同
mysql -uroot -ppassward -Ssocket file route
4)连接MySQL之后操作一些命令
-
-e,使用在shell脚本中
mysql -uroot -p'password' -e "request"
例如想要把所有的数据库列出来,mysql -uroot -p'123456root' -e "show database"
3.MySQL常用命令
mysql有自己专门的命令,必须要在连接了mysql之后才可以使用,这些命令和linux的命令不同
1)show databases; 查询库
可以看到现在还没有任何的database
注: 有时我们在输入命令时会遇见erro message ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
这时我们可以执行alter user 'root'@'localhost' identified by 'youpassword'; /set password=password("youpassword"); 来更改密码就没有问题了
2)use 库名; 切换库
例如我们想要切换到mysql这个库下面,就可以use mysql;
如下图
3)show tables; 查看库里面的表
字段组成表,表组成库
4)desc 表的名字;查看表里的字段
例如我们查看user表里的字段
5) show create table 表名字\G;显示如何创建的表,也就是表里的语句
\G为竖排显示的意思
6)select usr(); 查看当前用户
如我们远程连接到内网mysql -uroot -p123456root -h192.168.244.128
再select user();
注:如果mysql不能全程连接,有可能是因为mysql服务器出于安全考虑,默认只允许本地登录数据库服务器,我们按照下面步骤操作就可以了
mysql -u root -p 先本地连接
mysql>use mysql;
mysql>update user set host = '%' where user = 'root';
mysql>flush privileges;
mysql>select host, user from user;
---------------------
作者:hjulkk
来源:CSDN
原文:https://blog.csdn.net/hjulkk/article/details/52563044
版权声明:本文为博主原创文章,转载请附上博文链接!
注:mysql也有类似于linux shell命令history一样的功能,其命令历史记录在.mysql_history中
注:mysql也支持Ctrl l的清屏功能
注:如果不想是某个命令生效,就在该命令之前加#就可以了
注:退出mysql,可以用quit/exit/ctrl d
7)select database(); 查看当前使用的数据库
如下图所示当前数据库为空
8)create database 数据库的名字;创建数据库
例如我们创建数据库db1
create database db1;
show databases;
如下图db1已经创建好了
9)创建库之后再创建表
先用use 库名;切换到想要创建表的库下
create table 表名(`id` int(4), `name` char(40));
`id` `name`用来制定字段
int 表示数字,(4)表示最长不超过4个数字
char 表示字符串,(40)表示最长不超过40个字符
上图中的CHARSET=latin1,可以在创建表的时候定义
我们可以用drop table tb_1;,把之前创建的表删除掉,重新再创建一个create table tb_1(`id` int(4), `name` char(40)) ENGINE=InnoDB DEFAULT CHARSET=UTF8;
然后我们在show create table tb_1\G; 就可以发现CHARSET变成了UTF8而不是Latin1了
注:两种常用的引擎myisam(自动检测行数) 和 innodb
10)select version(); 查看当前数据库的版本
11)show status;查看当前数据库的状态
12)show varibles; 查看参数
show variables like '参数'; 来查看某一个参数
例如; show variables like 'max_connect%'; %表示通配
13)set global 参数=...; 可以用来修改参数
例如 set global max_connections=1000;
如果想要永久改变参数,就需要退出来,编辑配置文件,vim /etc/my.cnf
14)show processlist; 用来查看队列,就类似于在linux中使用ps/top命令
show full processlist; 显示的信息更加完整
4.MySQL用户管理
1)MySQL创建用户及授权
-
grant all on *.* to 'user1' identified by 'passwd';
grant指授权的意思
all指所有的操作
*.* 指所有的库和表,*代表库,第二个*代表表
user1, 指创建的用户名,后面可以加@用来制定来源的ip,@%就表示所有的ip
identified by 'passwd', 设置新建用户的密码
所以这上面的user1用户拥有所有的权限
-
我们可以针对不同的权限来创建用户,例如
grant SELECT,UPDATE,INSERT on db1.* to 'user2'@'192.168.224.128' identified by 'bbbb';
创建user2,限制连接的ip为192.168.224.128, 并且只对db1库中的表有select/update/insert的操作,密码设置为bbbb
因为限定了连接ip,所以在登录user2的时候要远程连接
2)show grants; 查看当前用户的权限
-
show grants for user2@192.168.224.128;
这个实际应用的需求:如果一个用户需要用另外的ip登录,那么我们就可show grants,copy & paste创建用户的信息,可以使用相同的密码
5.常用sql语句-增删改查
• select count(*) from mysql.user;
count(*)表示行数,查看mysql库的user表的行数
• select * from mysql.db;
查看mysqld库中db表所有的内容
• select db from mysql.db;
查看某个字段
• select db,user from mysql.db;
查看多个字段可以用,号连接并列
• select * from mysql.db where host like '192.168.%';
模糊查询
• insert into db1.tb_1 values (1, 'abc');
把数据(1, 'abc')插入到db1.tb_1
注:字符串的操作最好加上''
• update db1.tb_1 set name='aaa' where id=1;
更改
注:delete可以删除内容,格式例如:delete from db1.tb_1 where id=1;
• truncate table db1.tb_1;
清空一个表中的全部数据
truncate/delete vs. drop
truncate/delete只会清空表中的内容,但是表的架构如字段等还会保留
drop会删除整张表
• drop table db1.t1;
删除表
• drop database db1;
删除库
6.MySQL数据库备份恢复
1)备份库、恢复库
-
mysqldump是一个备份的命令,可以备份库和表
格式可以写成
# mysqldump -uroot -p'passwd' 想要备份的库名或表名 > filename
例如我们就可以
mysqldump -uroot -p'123456root' mysql > /tmp/mysqlbak.sql , 用追加把备份内容拷贝到一个备份文件中去
-
备份完成后该如何恢复备份
还是用上面的例子, mysql -uroot -p'123456root' -e create database mysql2
mysql -uroot -p'123456root' mysql2 < /tmp/mysqlbak.sql
用反向重定向恢复备份
2)备份表、恢复表
•备份表 mysqldump -uroot -p'123456root' mysql user > /tmp/user.sql
如果想要备份表就直接在库后面加空格表名就可以了
• 恢复表 mysql -uroot -p'123456root'mysql < /tmp/user.sql
在恢复一个表的备份时,无需写表名,只有库名就可以了
3) 备份所有库 mysqldump -uroot -p -A >/tmp/123.sql
-A 表示all
4) 只备份数据库中表结构 mysqldump -uroot -p -d mysql > /tmp/mysql.sql