13.1 设置更改root密码

大纲

blob.png

准备工作:

1 启动mysql服务

[root@AliKvn ~]# /etc/init.d/mysqld start

Starting MySQL.                                            [  OK  ]

2 设置MySQL环境变量

因为#mysql命令需要使用绝对路径/ /usr/local/mysql/bin/mysql,这样太麻烦了,

所以需要更改环境变量PATH,增加mysql绝对路径。

# ls /usr/local/mysql/bin/mysql

/usr/local/mysql/bin/mysql

2.1 添加环境变量

[root@AliKvn ~]# export PATH=$PATH:/usr/local/mysql/bin/

测试使用mysql命令

blob.png

2.2 使命令用久生效 把命令放在profile的最后面

[root@AliKvn ~]# vim /etc/profile

unset -f pathmunge

export PATH=$PATH:/usr/local/mysql/bin/

~                                                                             

~         

source /etc/profile 使其用久生效。

[root@AliKvn ~]# source /etc/profile

3 进入mysql

-u指定用户,-p指定密码(如果无密码,直接回车进入)

[root@AliKvn ~]# mysql -uroot -p

mysql> quit

Bye

4 因为MySQL第一次进去是不需要密码的,比较危险,所以需要设置密码

[root@AliKvn ~]# mysqladmin -uroot password 'aminglinux.1'

Warning: Using a password on the command line interface can be insecure.

测试指定密码进入

[root@AliKvn ~]# mysql -uroot -p

4.1 更改密码

[root@AliKvn ~]# mysqladmin -uroot -p'aminglinux.1' password 'aminglinux.2'

Warning: Using a password on the command line interface can be insecure.

5 密码重置(在没有root密码的时候修改root密码)

在[mysqld]增加skip-grant,此配置的意义就是忽略授权,加入配置后,不需要登录密码即可进入MySQL

#vi /etc/my.cnf 

[root@AliKvn ~]# vim /etc/my.cnf

[mysqld]

skip-grant

datadir=/data/mysql

socket=/tmp/mysql.sock

5.1 配置完成后,重启服务使其生效。

[root@AliKvn ~]# /etc/init.d/mysqld restart 

Shutting down MySQL..                                      [  OK  ]

Starting MySQL.                                            [  OK  ]

5.2 测试

[root@AliKvn ~]# mysql -uroot

直接进入,无需任何认证。

mysql>  

5.3 使用mysql库

mysql> use mysql;

Reading table information for completion of table and column names

You can turn off this feature to get a quicker startup with -A

Database changed

5.4 进入密码表

mysql> select password from user ;

+-------------------------------------------+

| password                                  |

+-------------------------------------------+

| *C2586DB1E5698A5F1DC57808497DA087CC1EF767 |

|                                           |

|                                           |

|                                           |

|                                           |

|                                           |

+-------------------------------------------+

6 rows in set (0.01 sec)

5.5 在密码表输入命令,更改密码

mysql> update user set password=password('aminglinux') where user='root';

Query OK, 4 rows affected (0.00 sec)

Rows matched: 4  Changed: 4  Warnings: 0

密码更新成功,quit退出mysql

mysql> quit

Bye

6 修改完成后,需要把跳过验证参数(skip-grant)删除,不然会发生很大安全隐患

[root@AliKvn ~]# vim /etc/my.cnf

[mysqld]

datadir=/data/mysql

socket=/tmp/mysql.sock

修改后,重启服务

[root@AliKvn ~]# /etc/init.d/mysqld restart 

Shutting down MySQL..                                      [  OK  ]

Starting MySQL.                                            [  OK  ]

6.1 用新密码测试登录MySQL

[root@AliKvn ~]# mysql -uroot -paminglinux

Warning: Using a password on the command line interface can be insecure.

Welcome to the MySQL monitor.  Commands end with ; or \g.

13.2 连接MySQL

1 本地 ip:port连接

[root@AliKvn ~]# mysql -uroot -paminglinux -h127.0.0.1 -P3306

image.png

2 还可以利用socket去连接。MySQL的socket在/tmp/mysql.sock

检查mysql.sock的监听状态

[root@AliKvn ~]# !ps

ps aux |grep mysql.sock

image.png

socket连接

[root@AliKvn ~]# mysql -uroot -paminglinux -S/tmp/mysql.sock

这种情况只适合用在本机上(这种方法和第一种是一样的,也是默认的连接方法)

3 连接MySQL顺便操作一些命令

[root@AliKvn ~]# mysql -uroot -paminglinux -e "show databases"

Warning: Using a password on the command line interface can be insecure.

+--------------------+

| Database           |

+--------------------+

| information_schema |

| mysql              |

| performance_schema |

| test               |

+--------------------+

进入MySQL,然后执行#show databases命令。

这种情况适用在shell脚本,例如监听MySQL的连接数。

13.3 MySQL常用命令

慎记,MySQL里的命令在Linux上是执行不到的。但是通过mysql -e "命令" 可以指定执行。

在MySQL里面执行命令,以 结束。

连接MySQL

[root@AliKvn ~]# mysql -uroot -paminglinux

查询库 show databases;

切换库 use mysql;

查看库里的表 show tables;

查看整张表的内容 select * from tb_name;

查看表里的字段 desc tb_name;

字段,表,库三者的关系,库是由表组成,表是有字段组成。

操作:

查看user字段,

1 先切换库

use mysql;

mysql> use mysql;

Reading table information for completion of table and column names

You can turn off this feature to get a quicker startup with -A

Database changed

2 再查看user字段,

mysql> desc user;

image.png

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

image.png

查看当前用户 select user();

mysql> select user();

+----------------+

| user()         |

+----------------+

| root@localhost |

+----------------+

1 row in set (0.00 sec)

当前用户是localhost,其实127.0.0.1连接进来也是localhost,因为127.0.0.1就是localhost.

接下来试试用本机ip连接看看

[root@AliKvn ~]# mysql -h172.18.171.157 -paminglinux

mysql> select user();

+-------------+

| user()      |

+-------------+

| root@AliKvn |

+-------------+

1 row in set (0.00 sec)

AliKvn是本机的主机名,而172.18.171.157被传解析了,所以AliKvn是被172.18.171.157解析出来的。

MySQL的命令历史记录存在/root/.mysql_history 

查看方法 less .mysql_history 

 

查看当前使用的数据库 select databsase();

mysql> select database();

+------------+

| database() |

+------------+

| NULL       |

+------------+

1 row in set (0.00 sec)

NULL为空,例如切换到mysql库下,这里不会显示空。

mysql> use mysql

Database changed

mysql>  select database();

+------------+

| database() |

+------------+

| mysql      |

+------------+

1 row in set (0.00 sec)

创建库 create database db1;

mysql> create database db1;

Query OK, 1 row affected (0.00 sec)

mysql> show databases;

+--------------------+

| Database           |

+--------------------+

| information_schema |

| db1                |

| mysql              |

| performance_schema |

| test               |

+--------------------+

5 rows in set (0.00 sec)

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

1 先切换db1库

mysql> use db1;

Database changed

2 再创建表t1

mysql> create table t1(`id` int(4), `name` char(40));

Query OK, 0 rows affected (0.02 sec)

3 查看创建的表

mysql> show create table t1\G

*************************** 1. row ***************************

       Table: t1

Create Table: CREATE TABLE `t1` (

  `id` int(4) DEFAULT NULL,

  `name` char(40) DEFAULT NULL

) ENGINE=InnoDB DEFAULT CHARSET=latin1

1 row in set (0.00 sec)

定义utf8格式 

操作:

1 删除表

drop table t1;

mysql> drop table t1;

Query OK, 0 rows affected (0.01 sec)

2 定义utf8格式

mysql> create table t1(`id` int(4), `name` char(40)) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Query OK, 0 rows affected (0.02 sec)

查看刚刚创建t1的表(utf8)

mysql> show create table t1\G;

*************************** 1. row ***************************

       Table: t1

Create Table: CREATE TABLE `t1` (

  `id` int(4) DEFAULT NULL,

  `name` char(40) DEFAULT NULL

) ENGINE=InnoDB DEFAULT CHARSET=utf8

1 row in set (0.00 sec)

ERROR: 

No query specified

查看当前数据库版本 select version();

mysql> select version();

+-----------+

| version() |

+-----------+

| 5.6.35    |

+-----------+

1 row in set (0.00 sec)

 查看数据库状态 show status;

将常用的数据列出来

查看各参数 show variables;

mysql> show variables;

image.png

查看指定参数,%表示通配符

mysql> show variables like 'max_connect%';

+--------------------+-------+

| Variable_name      | Value |

+--------------------+-------+

| max_connect_errors | 100   |

| max_connections    | 151   |

+--------------------+-------+

2 rows in set (0.00 sec)

修改参数 set global max_connect_errors=1000;(如果想永久生效,需要修改/etc/my.conf,添加相关配置参数)

mysql> set global max_connect_errors=1000;

Query OK, 0 rows affected (0.00 sec)

mysql> show variables like 'max_connect%';

+--------------------+-------+

| Variable_name      | Value |

+--------------------+-------+

| max_connect_errors | 1000  |

| max_connections    | 151   |

+--------------------+-------+

2 rows in set (0.00 sec)

 max_connect_errors 1000  数值变成了1000

 查看队列 两者体验在info上,full的比较完整。(查看队列命令用得最多,需要熟练使用)

mysql> show processlist;

+----+------+--------------+------+---------+------+-------+------------------+

| Id | User | Host         | db   | Command | Time | State | Info             |

+----+------+--------------+------+---------+------+-------+------------------+

| 13 | root | AliKvn:56928 | NULL | Query   |    0 | init  | show processlist |

+----+------+--------------+------+---------+------+-------+------------------+

1 row in set (0.00 sec)

这个比较完整查看队列。

show full processlist;

mysql> show full processlist;

+----+------+--------------+------+---------+------+-------+-----------------------+

| Id | User | Host         | db   | Command | Time | State | Info                  |

+----+------+--------------+------+---------+------+-------+-----------------------+

| 13 | root | AliKvn:56928 | NULL | Query   |    0 | init  | show full processlist |

+----+------+--------------+------+---------+------+-------+-----------------------+

1 row in set (0.00 sec)