Mysql是一个典型的C/S服务结构,它自带客户端,例如:mysql、mysqladmin和mysqldump等
MySQL设置密码
#初始状态下,管理员root的密码为空或者是随机生成的,而且只允许本机登录。一般情况下,我们安装好Mysql之后的第一件事就是修改默认的密码。
# 设置初始密码 由于原密码为空,因此-p可以不用
[root@db03 ~]# mysqladmin -uroot password "old.321"
#这种设置密码暴露在命令行,不安全。推荐下一种
[root@db03 ~]# mysqladmin -uroot password
New password:
Confirm new password:
# 修改mysql密码,因为已经有密码了,所以必须输入原密码才能设置新密码
[root@db03 ~]# mysqladmin -uroot -p"123" password "zhang.321"
#同理,推荐下一种
[root@db03 ~]# mysqladmin -uroot -p password
Enter password:
New password:
Confirm new password:
MySQL修改密码
无论是初始化之后第一次修改密码,还是日常维护中的修改root密码,修改root密码都是非常有必要的。再企业实际生产环境中,要求隔一段时间都会修改密码。那么具体修改密码的方式有哪些,下面我们来演示一下。
1.使用mysqladmin客户端修改
-- 语法格式:
mysqladmin -u username -h hostname -p password "newpwd"
-- 语法参数说明如下:
● usermame 指需要修改密码的用户名称,在这里指定为 root 用户;
● hostname 指需要修改密码的用户主机名,该参数可以不写,默认是 localhost;
● password 为关键字,而不是指旧密码;
● newpwd 为新设置的密码,必须用双引号括起来。如果使用单引号会引发错误,可能会造成修改后的密码不是你想要的。
-- 示例:
[root@db03 ~]# mysqladmin -uroot -p password
Enter password:
New password:
Confirm new password:
2.使用SET语句修改普通用户的密码
-- 在 MySQL 中,只有 root 用户可以通过更新 MySQL 数据库来更改密码。使用 root 用户登录到 MySQL 服务器后,可以使用 SET 语句来修改普通用户密码。
mysql> set password for zzc@'172.16.1.52' = password("zzc@123");
Query OK, 0 rows affected, 1 warning (0.00 sec)
[root@db02 ~]# mysql -uzzc -pzzc@123 -h172.16.1.51
mysql: [Warning] Using a password on the command line interface can be
----------- -------- ----------- ---------------
mysql>
3.使用UPDATE语句修改普通用户的密码
-- 使用 root 用户登录 MySQL 服务器后,可以使用 UPDATE 语句修改 MySQL 数据库的 user 表的 authentication_string 字段,从而修改普通用户的密码。
mysql> update mysql.user set authentication_string = password('old') where user='zzc' and host='172.16.1.52';
Query OK, 1 row affected, 1 warning (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 1
#提示报错
[root@db02 ~]# mysql -uzzc -pold -h172.16.1.51
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 1045 (28000): Access denied for user 'zzc'@'172.16.1.52' (using password: YES)
mysql> -- 刷新权限
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
#再次登录,成功
[root@db02 ~]# mysql -uzzc -pold -h172.16.1.51
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
mysql> \q
4.使用 GRANT 语句修改普通用户密码
-- 还可以在全局级别使用 GRANT USAGE 语句指定某个账户的密码而不影响账户当前的权限。需要注意的是,使用 GRANT 语句修改密码,必须拥有 GRANT 权限。一般情况下最好使用该方法来指定或修改密码。
mysql> GRANT USAGE ON *.* TO 'test7'@'localhost' IDENTIFIED BY 'test0007';
Query OK, 0 rows affected, 2 warnings (0.00 sec)
5.使用ALTER语句修改
mysql> alter user root@localhost identified by 'boy@321';
Query OK, 0 rows affected (0.00 sec)
[root@db02 ~]# mysql -uzzc -pboy@321 -h172.16.1.51
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
------------ ---------- ------------------ -----------------
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
6.忘记root密码情况下修改
#首先停止mysql
[root@db03 ~]# systemctl stop mysqld
# --skip-grant-tables 跳过授权表 --skip-networking 禁止远程连接
[root@db03 ~]# mysqld_safe --skip-grant-tables --skip-networking &
#直接连接登录
[root@db03 ~]# mysql
mysql> update mysql.user set authentication_string=password('123qwe') where user='root' and Host = 'localhost';
#特别提醒注意的一点是,新版的mysql数据库下的user表中已经没有Password字段了,而是将加密后的用户密码存储于authentication_string字段
#刷新授权表,必须进行的一步
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
#正常启动,进行登录
[root@db03 ~]# systemctl start mysqld
[root@db03 ~]# mysql -uroot -p123qwe
---------------- ------------------- ------------- ---------------- ------------------- -------------
#或者在/etc/my.cnf文件中添加 skip-grant-tables 参数
[root@db03 ~]# vim /etc/my.cnf
[mysqld]
skip-grant-tables
#重启mysql并登录
[root@db01 ~]# systemctl restart mysqld
[root@db03 ~]# mysql
mysql>
mysql> update mysql.user set authentication_string=password('123qwe') where user='root' and Host = 'localhost';
Query OK, 1 row affected, 1 warning (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 1
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)
#删除skip_grant_tables
[root@db03 ~]# vim /etc/my.cnf
[root@db03 ~]# systemctl restart mysqld
[root@db03 ~]# mysql -uroot -p123qwe
mysql: [Warning] Using a password on the command line interface can be insecure.
mysql>
MySQL连接方式
1. TCP/IP的连接方式
2. 套接字连接方式,socket连接
3. 默认使用socket方式连接
#查看连接方式
mysql> status;
--------------
Connection: Localhost via UNIX socket
3.举例:
3.1.TCP/IP连接,通常带有-h选项的都是TCP/IP链接
mysql -uroot -p -h127.0.0.1 -P 端口号
mysql -uroot -p -h127.0.0.1 -S /tmp/mysql.sock
3.2.socket连接
mysql -uroot -p123(默认连接方式,socket)
4.注意:
4.1.因为使用TCP/IP连接,需要建立三次握手
4.2.不一定-h都是tcp,-hlocalhost是socket连接
mysql -uroot -p -hlocalhost
5.第三方连接工具
#最常用的数据库连接工具是Navicat来连接数据库,这个数据库连接工具的功能非常强大,非常适合用来操作数据库
# 在链接之前,必须创建远程连接用户
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY 'Oldboy@666' WITH GRANT OPTION;
ALL PRIVILEGES : 所有的权限
*.* : 正对于所有的库所有的表
root : 用户名
localhost : 可以链接的IP(%代表所有的IP)
mysql> FLUSH PRIVILEGES;
mysqladmin 命令
1.修改密码,设置密码:password
[root@db03 ~]# mysqladmin -uroot -p旧密码 password '新密码'
2.关闭MySQL服务:shutdown
[root@db03 ~]# mysqladmin -uroot -p密码 -S socket文件 shutdown
3.库外建库:create
[root@db03 ~]# mysqladmin -uroot -p密码 create egon
[root@db03 ~]# mysql -uroot -p123456 -e 'create database egon'
4.库外删除数据库:drop
[root@db03 ~]# mysqladmin -uroot -p123456 drop egon
Do you really want to drop the 'egon' database [y/N] y
Database "egon" dropped
5.查看配置文件所有的默认参数:variables
[root@db03 ~]# mysqladmin -uroot -p123456 variables
[root@db03 ~]# mysqladmin -uroot -p123456 variables | grep server_id
6.检测MySQL进程是否存活:ping
[root@db03 ~]# mysqladmin -uroot -p123456 ping
7.查看数据库 慢查询,负载信息:status
[root@db03 ~]# mysqladmin -uroot -p123456 status
Uptime MySQL服务器已经运行的秒数
Threads 活跃线程(客户)的数量
Questions 从mysqld启动起来自客户问题的数量 已经发送给服务器的查询的个数
Slow queries 已经超过long_query_time秒的查询数量
Opens mysqld已经打开了多少表
Flush tables flush ..., refresh和reload命令数量
Open tables 现在被打开的表数量
Queries per second avg: 0.046 负载
8.重载授权表,刷新缓存主机:reload,相当于flush privileges
[root@db03 ~]# mysqladmin -uroot -p123456 reload
9.刷新binlog日志
[root@db03 ~]# mysqladmin -uroot -p123456 flush-log
MySQL登录和退出
-- 语法格式:
mysql -h hostname|hostlP -p port -u username -p DatabaseName -e "SQL语句"
-- 退出
exit
quit
\q
#对上述参数说明如下:
-- -h:指定连接 MySQL 服务器的地址。可以用两种方式表示,hostname 为主机名,hostIP 为主机 IP 地址。
-- -P:指定连接 MySQL 服务器的端口号,port 为连接的端口号。MySQL 的默认端口号是 3306,因此如果不指定该参数,默认使用 3306 连接 MySQL 服务器。
-- -u:指定连接 MySQL 服务器的用户名,username 为用户名。
-- -p:提示输入密码,即提示 Enter password。
-- DatabaseName:指定连接到 MySQL 服务器后,登录到哪一个数据库中。如果没有指定,默认为 mysql 数据库。
-- -e:指定需要执行的 SQL 语句,登录 MySQL 服务器后执行这个 SQL 语句,然后退出 MySQL 服务器。
[root@db01 ~]# mysql -e "desc world.student"
+-------+-------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(20) | NO | | NULL | |
| sex | enum('男','女') | YES | | 男 | |
+-------+-------------------+------+-----+---------+----------------+
MySQL的内部命令
\c: 终止正在输入的命令
\r: 重新连接数据库
\d: 修改sql语句结束符
\e: 输出输入的内容
\G: 以key:values形式展示数据
\q: 退出数据库
\g: 结束语句
\h: 查看帮助
\T: 输出一个文件记录操作
\t: 终止记录操作的文件
\p: 打印输入的命令
\R: 临时修改命令提示符
\. 导入sql语句,等于 source 命令
\s: 查看数据库连接状态
\!: 在数据库里执行命令行命令
\u 切换数据库,等于 use 命令