Mysql用户授权和多实例

mysql 表的物理存储结构

MyISAM(一种引擎)的表:
-rw-r----- 1 mysql mysql   10816 Apr 18 11:37 user.frm
-rw-r----- 1 mysql mysql     396 Apr 18 12:20  user.MYD
-rw-r----- 1 mysql mysql    4096 Apr 18 14:48 user.MYI
InnoDB(默认的存储引擎)的表:
-rw-r----- 1 mysql mysql    8636 Apr 18 11:37 time_zone.frm
-rw-r----- 1 mysql mysql   98304 Apr 18 11:37 time_zone.ibd
time_zone.frm:存储列相关信息
time_zone.ibd:数据行+索引

用户管理

用户名@'白名单'
白名单支持的方式?
zhangsan@'10.0.0.%'        表示zhangsan 可以在10.0.0.0/24 这个网段访问数据库 
zhangsan@'%'                表示zhangsan可以在任何地方访问数据库
zhangsan@'10.0.0.200'        表示zhangsan只能在10.0.0.200这台主机上访问数据库
zhangsan@'localhost'         表示zhangsan只能在数据库服务器上访问数据库
zhangsan@'10.0.0.5%'         表示zhangsan可以在10.0.0.50-59这几台主机上访问数据库
zhangsan@'10.0.0.0/255.255.254.0'  表示zhangsan可以zazai 10.0.0.0/23这个网段访问数据库

创建用户

mysql> create user zhangsan@'192.168.57.%' identified by '123456';
Query OK, 0 rows affected (0.00 sec)

查询用户

mysql> select user ,host from mysql.user;
+---------------+--------------+
 user  host 
+---------------+--------------+
 zhangsan  192.168.57.% 
 mysql.session  localhost 
 mysql.sys  localhost 
 root  localhost 
+---------------+--------------+
4 rows in set (0.00 sec)

修改用户

mysql> alter user zhangsan@'192.168.57.%' identified by '654321';
Query OK, 0 rows affected (0.00 sec)

删除用户

mysql> drop user zhangsan@'192.168.57.%';
Query OK, 0 rows affected (0.01 sec)

权限管理

创建权限

mysql> grant all on blog.\* to blog@'192.168.57.%' identified by '123456';
Query OK, 0 rows affected, 1 warning (0.00 sec)

常用权限列表

ALL:
SELECT,INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, CREATE TABLESPACE
ALL : 以上所有权限,一般是普通管理员拥有的
with grant option:超级管理员才具备的,给别的用户授权的功能

查看权限

mysql> show grants for blog@'192.168.57.%';
+-----------------------------------------------------------+
 Grants for blog@192.168.57.% 
+-----------------------------------------------------------+
 GRANT USAGE ON *.* TO 'blog'@'192.168.57.%' 
 GRANT ALL PRIVILEGES ON `blog`.* TO 'blog'@'192.168.57.%' 
+-----------------------------------------------------------+
2 rows in set (0.00 sec)

回收权限

mysql> revoke delete on blog.* from blog@'192.168.57.%';
Query OK, 0 rows affected (0.00 sec)

mysql> show grants for blog@'192.168.57.%';
+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 Grants for blog@192.168.57.% 
+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
 GRANT USAGE ON *.* TO 'blog'@'192.168.57.%' 
 GRANT SELECT, INSERT, UPDATE, CREATE, DROP, REFERENCES, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, EVENT, TRIGGER ON `blog`.* TO 'blog'@'192.168.57.%' 
+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)

Mysql root密码忘记处理方法

使用mysqld_safe启动 取消加载授权表和网络  把权限刷入内存 在alter修改   重启mysql

[root@db01 ~]# mysqld_safe --skip-grant-tables --skip-networking &
mysql> flush privileges;
mysql>  alter user root@'localhost' identified by '123456';
[root@db01 ~]# pkill mysqld
[root@db01 ~]# systemctl start  mysqld

Mysql 连接常用参数

-u 用户

-p 密码

-h IP

-P 端口

-S socket文件

-e 免交互执行命令

< 导入SQL脚本

创建mysql多实例

mkdir -p /data/330{7,8,9}/data

创建配置文件

[root@localhost ~]# cat > /data/3307/my.cnf <<EOF
> [mysqld]
> basedir=/usr/local/mysql
> datadir=/data/3307/data
> socket=/data/3307/mysql.sock
> log_error=/data/3307/mysql.log
> port=3307
> server_id=7
> log_bin=/data/3307/mysql-bin
> EOF
[root@localhost ~]# 
[root@localhost ~]# cat > /data/3308/my.cnf <<EOF
> [mysqld]
> basedir=/usr/local
> datadir=/data/3308/data
> socket=/data/3308/mysql.sock
> log_error=/data/3308/mysql.log
> port=3308
> server_id=8
> log_bin=/data/3308/mysql-bin
> EOF


[root@localhost ~]# cat > /data/3309/my.cnf <<EOF
> [mysqld]
> basedir=/usr/local
> datadir=/data/3309/data
> socket=/data/3309/mysql.sock
> log_error=/data/3309/mysql.log
> port=3309
> server_id=9
> log_bin=/data/3309/mysql-bin
> EOF

初始化三套数据

mv /etc/my.cnf /etc/my.cnf.bak
mysqld --initialize-insecure --user=mysql --datadir=/data/3307/data --basedir=/usr/local/mysql
mysqld --initialize-insecure --user=mysql --datadir=/data/3308/data --basedir=/usr/local/mysql
mysqld --initialize-insecure --user=mysql --datadir=/data/3309/data --basedir=/usr/local/mysql

systemd管理多实例

cd /etc/systemd/system
cp mysqld.service mysqld3307.service
cp mysqld.service mysqld3308.service
cp mysqld.service mysqld3309.service

vim mysqld3307.service
ExecStart=/usr/local/mysql/bin/mysqld  --defaults-file=/data/3307/my.cnf
vim mysqld3308.service
ExecStart=/usr/local/mysql/bin/mysqld  --defaults-file=/data/3308/my.cnf
vim mysqld3309.service
ExecStart=/usr/local/mysql/bin/mysqld  --defaults-file=/data/3309/my.cnf

授权

chown -R mysql.mysql /data/*

启动

systemctl start mysqld3307.service
systemctl start mysqld3308.service
systemctl start mysqld3309.service

验证

[root@localhost system]# netstat -lnpgrep 330
tcp6 0 0 :::3307 :::* LISTEN 24669/mysqld 
tcp6 0 0 :::3308 :::* LISTEN 24681/mysqld 
tcp6 0 0 :::3309 :::* LISTEN 24744/mysqld 
tcp6 0 0 :::3306 :::* LISTEN 5412/mysqld 
unix 2 [ ACC ] STREAM LISTENING 608826 24681/mysqld /data/3308/mysql.sock
unix 2 [ ACC ] STREAM LISTENING 608823 24669/mysqld /data/3307/mysql.sock
unix 2 [ ACC ] STREAM LISTENING 609060 24744/mysqld /data/3309/mysql.sock

Mysql用户授权和多实例
http://www.jcwit.com/article/28/
作者
Carlos
发布于
2019年6月8日
许可协议