文章目录
展开MySQL中的用户不是只看用户名
MySQL的用户组成:
-
用户名
-
主机域
MySQL用户的作用
- 登陆MySQL数据库
- 管理数据对象
用户的定义:
-
1) username@主机域
-
2)主机域:可以理解为是MySQL登陆的白名单
-
3)主机域格式:
-
172.16.1.%
-
172.16.%.%
-
172.%.%.%
-
%
-
172.16.1.0/255.255.255.0
-
172.16.1.5%(172.16.1.50-59 172.16.1.5)
MySQL用户密码管理
## MySQL5.6修改密码 #方法一 [root@db01 ~]# mysqladmin -uroot -p password'111' #方法二 mysql> set password=PASSWORD('666'); #方法三 update修改密码(配合刷新授权表) mysql> update mysql.user set password=PASSWORD('222') where user='root' and host='localhost'; mysql> flush privileges; //(只有在修改密码时,才需要用到) #方法四 mysql> grant all on *.* to root@'localhost' identified by '123'; ## MySQL5.7修改密码 #方法一 mysql> alter user root@'localhost' identified by '123'; #方法二 mysql> set password=PASSWORD('111'); (只能修改当前登陆的用户) #方法三 update修改密码(配合刷新授权表) mysql> update mysql.user set authentication_string=PASSWORD('222') where user='root' and host='localhost'; mysql> flush privileges; //(只有在修改密码时,才需要用到) #方法四 mysql> grant all on *.* to root@'localhost' identified by '123'; #方法五 [root@db03 ~]# mysqladmin -uroot -p password '789'
忘记root密码
# 1.停止mysql服务 [root@db01 ~]# /etc/init.d/mysqld stop # 2.跳过授权 直接登陆mysql [root@db01 ~]# mysqld --user=mysql --skip-grant-tables & # 3.启动mysql 修改用户密码 [root@db01 ~]# mysql mysql> update mysql.user set authentication_string=PASSWORD('123') where user='root' and host='localhost'; mysql> flush privileges; # 4. 重启mysql [root@db01 ~]# /etc/init.d/mysqld restart
权限管理
MySQL的权限定义:
作用对象:库、表
用户权限INSERT,SELECT, 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
归属
每次设定只能有一个属主,没有属组或其他用户的概念grant all on *.* to user@'%' identified by '123'; 所有权限 库.表 用户@主机域 密码
作用对象分解
*.* [当前MySQL实例中所有库下的所有表] wordpress.* [当前MySQL实例中wordpress库中所有表(单库级别)] wordpress.user [当前MySQL实例中wordpress库中的user表(单表级别)]
权限的设定
开发人员说:请给我开一个用户
沟通:
-
你需要对哪些库、表进行操作
-
你从哪里连接过来
-
用户名有没有要求
-
密码要求
-
发邮件
#一般给开发创建用户权限 grant select,update,insert on lol.* to dev@'10.0.0.%' identified by '复杂一点'; # 一般来说 企业里不会给开发删除权限 grant select,update,insert,delete on lol.* to dev@'10.0.0.%' identified by '复杂一点'; ## 脱敏:脱离敏感信息 mysql> grant select(user,host),update,insert on mysql.user to dev1@'localhost' identified by '123';
mysql 连接管理
mysql
-u 指定用户 -p 指定密码 -h 指定主机域 -S 指定socket -P 指定端口 -e 免交互执行SQL语句 ---------------------- --protocol=name:指定连接方式(第三方的连接工具)
MySQL启动关闭流程
# 复制mysql下的启动脚本到启动目录下做启动文件 cp /app/mysql/support-files/mysql.server /etc/init.d/mysqld # 启动mysql [root@db02 ~]# /etc/init.d/mysqld start # 启动命令并指定了启动文件 [root@db02 ~]# /app/mysql/bin/mysqld --defaults-file=/etc/my.cnf --user=mysql # 跳过授权表并只能本地访问 # mysqld_safe --skip-grant-tables --skip-networking # 编辑service启动文件 [root@db02 system]# vim /usr/lib/systemd/system/mysqld.service [Unit] Description=mysqld [Service] #Type=notify ExecStart=/app/mysql/bin/mysqld --defaults-file=/etc/my.cnf --user=mysql KillMode=process Restart=on-failure RestartSec=42s [Install] WantedBy=multi-user.target # 重载配置文件 [root@db02 system]# systemctl daemon-reload # 把mysql设置为开机自启 [root@db02 system]# systemctl enable mysqld ### 二进制使用systemctl启动mysqld一定要加上这两行 [mysqld] basedir=/app/mysql datadir=/app/mysql/data
启动方式
/etc/init.d/mysqld start systemctl start mysqld /app/mysql/bin/mysqld --defaults-file=/etc/my.cnf --user=mysql
停止方式
/etc/init.d/mysqld stop systemctl stop mysqld mysqladmin -uroot -p222 shudown # kill kill -9 pid pikill mysqld pikill -9 pid killall mysqld
MySQL的配置管理
-
预编译:cmake去指定,硬编码到程序当中去
-
配置文件
-
/etc/my.cnf
-
/etc/mysql/my.cnf
-
$basedir/my.cnf
-
default-extra-file
-
~/.my.cnf
# 配置文件的读取顺序,从上往下读取配置文件,但如果指定文件,就走指定文件的路径 例:--defaults-file=/etc/my.cnf # 后写入的文件会优先于前面写入的文件
- 在命令行设定启动初始化配置
思考问题:
#cmake: socket=/application/mysql/tmp/mysql.sock #命令行: --socket=/tmp/mysql.sock #配置文件: /etc/my.cnf中[mysqld]标签下:socket=/opt/mysql.sock #default参数: --defaults-file=/tmp/a.txt配置文件中[mysqld]标签下:socket=/tmp/test.sock 预编译:/app/mysql/tmp/mysql.sock 命令行:/tmp/mysql.sock 默认配置文件/etc/my.cnf:/opt/mysql.sock --defaults-file:/tmp/test.sock 启动MySQL后,socket在哪,叫啥名? /tmp - mysql.sock - test.sock /opt - mysql.sock # 执行命令 /app/mysql/bin/mysqld --defaults-file=/tmp/a.txt --user=mysql --socket=/tmp/mysql.sock # 结论 在/tmp/mysql.sock 因为在命令行指定了socket的文件路径
MySQL配置优先级
- 1.命令行
- 2.配置文件
- 2.1 ~/.my.cnf
- 2.2 default-extra-file
- 2.3 /app/mysql/my.cnf
- 2.4 /etc/mysql/my.cnf
- 2.5 /etc/my.cnf
- 3.预编译
MySQL配置文件中标签的作用
[mysqld] //影响服务端的启动 [mysql] //影响客户端的连接(影响mysql) [mysqladmin] //影响客户端的mysqladmin [server] //影响服务端的启动 [client] //影响客户端的连接(mysql、mysqladmin、mysqldump)
MySQL多实例
单实例:一个进程 + 多个线程 + 一个预分配的内存结构
多实例:多个进程 + 多个线程 + 多个预分配的内存结构(基本在测试环境中使用)
先决条件
共享同一个basedir
数据目录不同 datadir
- 多个配置文件
- socket
- port
- log
- pid文件
实施MySQL多实例
# 创建多实例目录 mkdir -p /data/330{7,8,9}/data ## 目录结构 [root@db02 ~]# tree /data/ /data/ ├── 3307 │ └── data ├── 3308 │ └── data └── 3309 └── data # 准备配置文件 [root@db02 ~]# vim /data/3307/my.cnf [mysqld] basedir=/app/mysql datadir=/data/3307/data port=3307 socket=/data/3307/mysql.sock log_error=/data/3307/mysql.log pid_file=/data/3307/mysql.pid [root@db02 ~]# vim /data/3308/my.cnf [mysqld] basedir=/app/mysql datadir=/data/3308/data port=3308 socket=/data/3308/mysql.sock log_error=/data/3308/mysql.log pid_file=/data/3308/mysql.pid [root@db02 ~]# vim /data/3309/my.cnf [mysqld] basedir=/app/mysql datadir=/data/3309/data port=3309 socket=/data/3309/mysql.sock log_error=/data/3309/mysql.log pid_file=/data/3309/mysql.pid ## 目录结构 [root@db02 ~]# tree /data /data ├── 3307 │ ├── data │ └── my.cnf ├── 3308 │ ├── data │ └── my.cnf └── 3309 ├── data └── my.cnf # 多实例初始化 cd /app/mysql/scripts/ [root@db02 scripts]# ./mysql_install_db --defaults-file=/data/3307/my.cnf --basedir=/app/mysql --datadir=/data/3307/data [root@db02 scripts]# ./mysql_install_db --defaults-file=/data/3308/my.cnf --basedir=/app/mysql --datadir=/data/3308/data [root@db02 scripts]# ./mysql_install_db --defaults-file=/data/3309/my.cnf --basedir=/app/mysql --datadir=/data/3309/data ## 目录结构 [root@db02 scripts]# tree /data/ -L 2 /data/ ├── 3307 │ ├── data │ ├── my.cnf │ └── mysql.log ├── 3308 │ ├── data │ ├── my.cnf │ └── mysql.log └── 3309 ├── data ├── my.cnf └── mysql.log # 授权 [root@db02 scripts]# chown -R mysql.mysql /data # 多实例启动 /app/mysql/bin/mysqld --defaults-file=/data/3307/my.cnf --user=mysql # 最优方法 [root@db02 system]# vim /usr/lib/systemd/system/mysql3307.service [Unit] Description=mysqld [Service] #Type=notify ExecStart=/app/mysql/bin/mysqld --defaults-file=/data/3307/my.cnf --user=mysql KillMode=process Restart=on-failure RestartSec=42s [Install] WantedBy=multi-user.target # 重载配置文件 [root@db02 system]# systemctl daemon-reload # 启动3307端口的mysql [root@db02 system]# systemctl start mysql3307 # 多实例创建密码 [root@db02 system]# mysqladmin -uroot -p -S /data/3307/mysql.sock password '123' # 连接多实例 ##方法1 [root@db02 system]# mysql -uroot -p123 -S /data/3307/mysql.sock ##方法2 [root@db02 system]# vim /usr/local/bin/mysql3307 mysql -uroot -p123 -S /data/3307/mysql.sock ###赋予执行权限 [root@db02 system]# chmod +x /usr/local/bin/mysql3307 ###连接mysql mysql3307
-
Comments | NOTHING