文章目录
展开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 mysqldMySQL的配置管理
-
预编译: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