mysql连接的两种方式
mysql服务端 10.0.0.51:3306
mysql -uroot -p密码 -h该账户允许登录的网段 -P实例端口第一种
基于ip:port的 网络链接形式,入口一 ,链接参数 ,-hlocahost -P3306
端口,窗口提供服务的入口windows机器,去链接 mysql服务端本质上是tcp的建立netstat 查看网络链接情况# 期望是你windows也装了个mysql,然后去登录windows命令行: mysql -uroot -p密码 -hlocalhost# 远程链接# 前提(默认mysql只提供了localhost登录,)# 授权操作,允许root@10.0.0.% 这个网段登录windows命令行:发请求10.0.0.1 这个windows的ip发出登录请求↓mysql -uroot -plinux3306 -h10.0.0.51 -P3306第二种
只能再10.0.0.51这个机器上,机器本地,基于进程套接字文件的链接形式
还能用window去用这个方式吗?不能!!!!!
#这个命令只能是在10.0.0.51这个机器去执行
mysql -uroot -plinux3306 -S /linux3306/mysql_3306/mysql.sock
启动、关闭mysql原理
systemctl start mysqld
systemctl stop mysqld如果这俩命令,报错了,如何排查
以及你得搞懂mysql启动的进程命令,背后的脚本加载逻辑,执行顺序管理3306实例的脚本逻辑顺序1. 脚本放在了 /etc/init.d/mysqld2. 可以用多种方式使用该脚本1.给脚本添加执行权限
/etc/init.d/mysqld start2. 该方式等于
service mysqld start 3.centos7上建议写法systemctl start mysqld4. service和systemctl命令都是去读取 /etc/init.d/目录下的脚本mysqld脚本文件5.再centos7下的加载顺序/etc/init.d/mysqld
↓
systemctl 去调用
↓
service 转化为systemctl
mysqld_safe和mysqld区别
mysqld_safe作用
1. mysql官方启动脚本,是以执行mysqld_safe为入口,其实mysqld_safe也是个shell脚本,调用了myqsld命令启动服务2.mysqld_safe脚本设置运行环境,如以守护进程运行
3.mysqld_safe检测mysqld运行状态
4.mysqld_safe检测mysqld进程运行信息,写入 mysql实例目录下的hostname.err文件
5.以及mysqld_safe会读取my.cnf配置文件的[mysqld],[mysqld_safe]等配置
mysqld作用
mysqld是mysql的核心程序,用于管理mysql的数据库文件,以及用户执行的SQL请求
mysqld读取my.cnf中 [mysqld]配置
关闭mysql
脚本关闭,什么脚本起的,就用什么脚本关
systemctl stop mysqld
service mysqld stop
/etc/init.d/mysqld stop
命令关闭
mysql> shutdown;
Query OK, 0 rows affected (0.00 sec)
特殊情况下,不建议用这个操作
kill pid
pkill mysqld
killall mysqldkill -9 pid # 极端情况下,才能用这个
# 除非进程卡死,无任何解决办法,再去 kill -9 pid 数据丢失,数据写入,事务提交,确认数据写入到磁盘,写入到日志
远程连接管理学习grant语句
本地连接
# 授权语句,创建一个用户,只允许本地连接
# 也能实现创建一个用户的作用
grant 权限 on 库.表 to 用户名@'允许登录的网段' identified by '远程登录的用户密码';
# 注意,写localhost 和127.0.0.1是不一样的# 创建wenjie用户,只允许再机器本地登录mysql 3307实例,给与最大权限,可以增删改查所有库表
# 先登录
[root@tech-db-51 ~]#mysql -uroot -plinux3307 -S /linux0224/mysql_3307/mysql.sock mysql>
mysql> grant all privileges on *.* to wenjie@'127.0.0.1' identified by 'wenjie666';
查看mysql的用户表
1. 登录
[root@tech-db-51 ~]#mysql -uroot -plinux3307 -S /linux0224/mysql_3307/mysql.sock 2. 先进入mysql库,查看库下的所有表mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)mysql> use mysql;# 查看当前再哪个库mysql> select database();
+------------+
| database() |
+------------+
| mysql |
+------------+
1 row in set (0.00 sec)# 查看当前库下有哪些表,2个语法# 完整的
mysql> show tables from mysql;# 简写
mysql> show tables;
授权,允许访问的网段
# 只允许wenjie用户在 10.0.0.0~255 网段登录,有最大的权限# 授权语句只能用root去操作# % 百分号表示一个任意匹配的意思
grant all privileges on *.* to wenjie@'10.0.0.%' identified by 'wenjie666';#查询mysql的用户表的信息,当前mysql实例,有哪些用户信息select * from mysql.user; # 默认查询所有的字段select user,host from mysql.user;# 再创建一个用户 songlin01 只允许再内网172网段登录mysqlgrant all privileges on *.* to songlin01@'172.16.1.%' identified by 'songlin666';mysql>
mysql> select user,host from mysql.user;
+---------------+------------+
| user | host |
+---------------+------------+
| wenjie | 10.0.0.% |
| wenjie | 127.0.0.1 |
| songlin01 | 172.16.1.% |
| mysql.session | localhost |
| mysql.sys | localhost |
| root | localhost |
| wenjie | localhost |
+---------------+------------+
7 rows in set (0.00 sec)
远程登录白名单语法
mysql -uroot -pwww.yuchaoit.cn -S /tmp/mysql.sock -e "grant all on . to bob01@'10.0.0.7' identified by 'yuchao666';"
mysql 用户授权语法用户名@'网段白名单'语法yuchao@'localhost' yuchao可以在本地登录(ip:3306),以及socketyuchao@'10.0.0.10' yuchao只能在10.0.0.10这个客户端登录
yuchao@'10.0.0.%' yuchao只能在10.0.0.xx/24网段登录
yuchao@'10.0.0.5%' yuchao只能在10.0.0.50~59 登录yuchao@'%' yuchao可以在任意地址登录该mysql服务端
yuchao@'db-51' 基于主机名的登录限制
用户管理
查看mysql用户列表
[root@db-51 ~]#mysql -uroot -pwww.yuchaoit.cn -e 'select User,Host,authentication_string from mysql.user;'
mysql: [Warning] Using a password on the command line interface can be insecure.
+---------------+-----------+-------------------------------------------+
| User | Host | authentication_string |
+---------------+-----------+-------------------------------------------+
| root | localhost | *E4270FA99E3E2D95856323D2C35CB2E4728028A1 |
| mysql.session | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| mysql.sys | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| yuchao01 | localhost | *518455521988924B96DD6FFF6F10BC59693382B0 |
| yuchao02 | 10.0.0.% | *518455521988924B96DD6FFF6F10BC59693382B0 |
| bob01 | 10.0.0.7 | *518455521988924B96DD6FFF6F10BC59693382B0 |
+---------------+-----------+-------------------------------------------+
[root@db-51 ~]#
创建用户
create user chaoge01@'localhost'; # 创建用户无密码select user,host,authentication_string from mysql.user; # 查询创建且设置密码create user chaoge02@'localhost' identified by '123';
修改用户密码,root去修改
alter user chaoge01@'localhost' identified by '123';
alter user chaoge01@'localhost' identified by 'yuchaoge666';
普通用户改自己密码
# 注意修改自己的密码,要进行加密处理# 需求,让wenjie修改自己的密码为 laoliu666set password=password('chaoge666');
删除用户
mysql> drop user chaoge02@'localhost';
Query OK, 0 rows affected (0.00 sec)
授权管理
权限的作用
限制mysql的用户,可以执行哪些SQL语句。
grant授权命令
查看所有文档
mysql> help grant;
语法
grant all privileges on . to 'yuchaoit'@'10.0.0.%' identifiedy by 'chaoge666';
授权实践
root默认不允许远程登录,给与权限,允许远程登录
grant all privileges on *.* to 'root'@'%' identified by 'chaoge666';
给一个普通开发者的账户权限,只能增删改查基本操作,且限定某个数据库,且只允许在内网环境连接。
grant select,update,delete,insert on crm.* to dev01@'10.0.0.%' identified by 'dev666';
查看具体用户的权限
mysql> show grants for chaoge01@'localhost';
+----------------------------------------------+
| Grants for chaoge01@localhost |
+----------------------------------------------+
| GRANT USAGE ON *.* TO 'chaoge01'@'localhost' |
+----------------------------------------------+
1 row in set (0.00 sec)
回收权限
# 移除删除权限
revoke delete on *.* from dev01@'10.0.0.%';# 移除所有权限,针对crm这个库
revoke all on crm.* from dev01@'10.0.0.%';再次查询
show grants for dev01@'10.0.0.%';
只有账户、无任意权限
该账户只能登录
mysql> show grants for dev01@'10.0.0.%';
+------------------------------------------+
| Grants for dev01@10.0.0.% |
+------------------------------------------+
| GRANT USAGE ON *.* TO 'dev01'@'10.0.0.%' |
+------------------------------------------+
1 row in set (0.00 sec)
privileges权限表
All/All Privileges权限代表全局或者全数据库对象级别的所有权限Alter权限代表允许修改表结构的权限,但必须要求有create和insert权限配合。如果是rename表名,则要求有alter和drop原表, create和insert新表的权限Alter routine权限代表允许修改或者删除存储过程、函数的权限Create权限代表允许创建新的数据库和表的权限Create routine权限代表允许创建存储过程、函数的权限Create tablespace权限代表允许创建、修改、删除表空间和日志组的权限Create temporary tables权限代表允许创建临时表的权限Create user权限代表允许创建、修改、删除、重命名user的权限Create view权限代表允许创建视图的权限Delete权限代表允许删除行数据的权限Drop权限代表允许删除数据库、表、视图的权限,包括truncate table命令Event权限代表允许查询,创建,修改,删除MySQL事件Execute权限代表允许执行存储过程和函数的权限File权限代表允许在MySQL可以访问的目录进行读写磁盘文件操作,可使用的命令包括load data infile,select … into outfile,load file()函数Grant option权限代表是否允许此用户授权或者收回给其他用户你给予的权限,重新付给管理员的时候需要加上这个权限Index权限代表是否允许创建和删除索引Insert权限代表是否允许在表里插入数据,同时在执行analyze table,optimize table,repair table语句的时候也需要insert权限Lock权限代表允许对拥有select权限的表进行锁定,以防止其他链接对此表的读或写Process权限代表允许查看MySQL中的进程信息,比如执行show processlist, mysqladmin processlist, show engine等命令Reference权限是在5.7.6版本之后引入,代表是否允许创建外键Reload权限代表允许执行flush命令,指明重新加载权限表到系统内存中,refresh命令代表关闭和重新开启日志文件并刷新所有的表Replication client权限代表允许执行show master status,show slave status,show binary logs命令Replication slave权限代表允许slave主机通过此用户连接master以便建立主从复制关系Select权限代表允许从表中查看数据,某些不查询表数据的select执行则不需要此权限,如Select 1+1, Select PI()+2;而且select权限在执行update/delete语句中含有where条件的情况下也是需要的Show databases权限代表通过执行show databases命令查看所有的数据库名Show view权限代表通过执行show create view命令查看视图创建的语句Shutdown权限代表允许关闭数据库实例,执行语句包括mysqladmin shutdownSuper权限代表允许执行一系列数据库管理命令,包括kill强制关闭某个连接命令, change master to创建复制关系命令,以及create/alter/drop server等命令Trigger权限代表允许创建,删除,执行,显示触发器的权限Update权限代表允许修改表中的数据的权限Usage权限是创建一个用户之后的默认权限,其本身代表连接登录权限
# by www.yuchaoit.cn
修改root密码
Mysqladmin改密码
myqsladmin 具体链接哪一个数据库实例 修改它的密码# 修改3307的root的密码
mysqladmin -uroot -plinux3307 -S /linux0224/mysql_3307/mysql.sock password new3307 # 客户端命令登录3307,查看信息
mysql -uroot -pnew3307 -S /linux0224/mysql_3307/mysql.sock -e "status;"
set语句修改
- root去修改他人密码- `set password for wenjie01@'10.0.0.%'=PASSWORD('wj666')`
- 用户直接用set命令改自己的密码- 普通用户登录后- `set password='新密码'`- `set password=PASSWORD('新密码')`
update语句修改
mysql> update mysql.user set authentication_string=password("www.yuchaoit.cn") where user='root' and host='localhost';
Query OK, 1 row affected, 1 warning (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 1mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)刷新后,权限表会更新
忘记root密码咋办
# 1. 修改my.cnf
skip-grant-table
重启密码了没问题,也修改完毕了# 案例,如忘记了 3307的密码vim /etc/mysql_3307.cnf
#这个功能是给 [mysqld]服务端
[root@tech-db-51 ~]#cat /etc/mysql_3307.cnf
[mysqld]
skip-grant-tables
port=3307
user=mysql
basedir=/opt/mysql/
datadir=/linux0224/mysql_3307/
socket=/linux0224/mysql_3307/mysql.sock
log_error=/linux0224/mysql_3307/mysql.log# 重启mysqld,读取该配置,跳过授权表[root@tech-db-51 ~]#vim /etc/mysql_3307.cnf[root@tech-db-51 ~]#bash /linux0224/3307.sh start
Starting MySQL...
[root@tech-db-51 ~]#ps -ef|grep 3307
root 2159 1 0 19:42 pts/0 00:00:00 /bin/sh /opt/mysql/bin//mysqld_safe --defaults-file=/etc/mysql_3307.cnf --pid-file=/linux0224/mysql_3307/mysqld_3307.pid
mysql 2322 2159 3 19:42 pts/0 00:00:00 /opt/mysql/bin/mysqld --defaults-file=/etc/mysql_3307.cnf --basedir=/opt/mysql/ --datadir=/linux0224/mysql_3307 --plugin-dir=/opt/mysql//lib/plugin --user=mysql --log-error=/linux0224/mysql_3307/mysql.log --pid-file=/linux0224/mysql_3307/mysqld_3307.pid --socket=/linux0224/mysql_3307/mysql.sock --port=3307
root 2352 1353 0 19:42 pts/0 00:00:00 grep --color=auto 3307# 登录试试,注意链接哪个实例[root@tech-db-51 ~]#mysql -S /linux0224/mysql_3307/mysql.sockmysql> set password='linux3307';
ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement想基于set修改密码,基于跳过授权表的登录状态,不允许走set修改暴力点update改密码表数据update mysql.user SET authentication_string=PASSWORD('linux3307') where user='root' and host='localhost' ;至此,密码修改完毕
刷新权限数据表;mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)# 2. 务必要改回来修改配置文件,去掉免密参数,重启,试试新密码
[root@tech-db-51 ~]#cat /etc/mysql_3307.cnf
[mysqld]
port=3307
user=mysql
basedir=/opt/mysql/
datadir=/linux0224/mysql_3307/
socket=/linux0224/mysql_3307/mysql.sock
log_error=/linux0224/mysql_3307/mysql.log重启
[root@tech-db-51 ~]#bash /linux0224/3307.sh restart
Restarting MySQL...
Stoping MySQL...
Starting MySQL...登录
[root@tech-db-51 ~]#mysql -uroot -plinux3307 -S /linux0224/mysql_3307/mysql.sock -e "status"
mysql: [Warning] Using a password on the command line interface can be insecure.
--------------
mysql Ver 14.14 Distrib 5.7.28, for linux-glibc2.12 (x86_64) using EditLine wrapperConnection id: 3
Current database:
Current user: root@localhost
SSL: Not in use
Current pager: stdout
Using outfile: ''
Using delimiter: ;
Server version: 5.7.28 MySQL Community Server (GPL)
Protocol version: 10
Connection: Localhost via UNIX socket
Server characterset: latin1
Db characterset: latin1
Client characterset: utf8
Conn. characterset: utf8
UNIX socket: /linux0224/mysql_3307/mysql.sock
Uptime: 46 secThreads: 1 Questions: 7 Slow queries: 0 Opens: 105 Flush tables: 1 Open tables: 98 Queries per second avg: 0.152