MySQL基本管理

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 命令

posted @ 2021-09-23 20:18  泽野  阅读(115)  评论(0编辑  收藏  举报