mysql 5.7使用弱密码html
validate_password_length 8 # 密码的最小长度,此处为8。 validate_password_mixed_case_count 1 # 至少要包含小写或大写字母的个数,此处为1。 validate_password_number_count 1 # 至少要包含的数字的个数,此处为1。 validate_password_policy MEDIUM # 强度等级,其中其值可设置为0、一、2。分别对应: 【0/LOW】:只检查长度。 【1/MEDIUM】:在0等级的基础上多检查数字、大小写、特殊字符。 【2/STRONG】:在1等级的基础上多检查特殊字符字典文件,此处为1。 validate_password_special_char_count 1 # 至少要包含的个数字符的个数,此处为1。
[root@db02 mysql-5.7.20]# yum install -y gcc gcc-c++ automake autoconf [root@db02 mysql-5.7.20]# yum install make cmake bison-devel ncurses-devel libaio-devel [root@db02 mysql-5.7.20]# wget httpss://dl.bintray.com/boostorg/release/1.65.1/source/boost_1_59_0.tar.gz #登陆boost.org下载也能够 [root@db02 mysql-5.7.20]# tar xf boost_1_59_0.tar.gz -C /usr/local/ [root@db02 mysql-5.7.20]# cmake . -DCMAKE_INSTALL_PREFIX=/application/mysql-5.7.20 \ -DMYSQL_DATADIR=/application/mysql-5.7.20/data \ -DMYSQL_UNIX_ADDR=/application/mysql-5.7.20/tmp/mysql.sock \ -DDOWNLOAD_BOOST=1 \ -DWITH_BOOST=/usr/local/boost_1_59_0 \ -DDEFAULT_CHARSET=utf8 \ -DDEFAULT_COLLATION=utf8_general_ci \ -DWITH_EXTRA_CHARSETS=all \ -DWITH_INNOBASE_STORAGE_ENGINE=1 \ -DWITH_FEDERATED_STORAGE_ENGINE=1 \ -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \ -DWITHOUT_EXAMPLE_STORAGE_ENGINE=1 \ -DWITH_ZLIB=bundled \ -DWITH_SSL=bundled \ -DENABLED_LOCAL_INFILE=1 \ -DWITH_EMBEDDED_SERVER=1 \ -DENABLE_DOWNLOADS=1 \ -DWITH_DEBUG=0
mysql
生成密码位置不同c++
select user,host passwd from mysql.usersql
5.6数据库
mysql 5.7vim
Linux用户的做用:安全
Linux用户管理:服务器
MySQL用户的做用:app
MySQL用户管理:socket
#建立用户 create user zls@'%'; #建立用户同时给密码(5.7)若是用户不存在无法使用grant create user qls@'%' identified by '123'; grant all on *.* to qls@'%';
mysql> drop user root@'db02'; Query OK, 0 rows affected (0.00 sec) mysql> drop user ''@'db02'; Query OK, 0 rows affected (0.00 sec)
mysql> update mysql.user set password=PASSWORD('123') where user='root' and host='localhost'; #进入库,在操做
用户的定义:
1) username@’主机域’
root@'%' select
root@'%' 超级用户
root@'172.0.0.0' 超级用户
2)主机域:能够理解为是MySQL登录的白名单
3)主机域格式:
用户管理实战
刚装完MySQL数据库该作的事情
[root@db02 mysql-5.7.20]# mysqladmin -uroot -p password 'oldboy123'
[root@db02 mysql-5.7.20]# mysql -uroot -p123
误删除了全部用户
#关闭数据库 [root@db02 mysql-5.7.20]# /etc/init.d/mysqld stop #通用 #启动数据库 [root@db02 mysql-5.7.20]# mysqld_safe --skip-grant-tables --skip-networking & #跳过受权表,跳过网路,只能sockect链接,不能tcp\ip链接 #使用mysql库 mysql> use mysql #错误方法一、建立root用户 mysql> create user root@’localhost’; #错误方法二、建立root用户 mysql> insert into user(user,host,password) values('root','10.0.0.55',PASSWORD('123')); #错误方法 mysql> insert into user(user,host,password,ssl_cipher,x509_issuer,x509_subject) values('root','localhost',PASSWORD('123'),'null','null','null'); #没有权限,表中没有权限 #正确方法建立root用户 mysql> insert into mysql.user values ('localhohost','root',PASSWORD('123'), -> 'Y', -> 'Y', -> 'Y', -> 'Y', -> 'Y', -> 'Y', -> 'Y', -> 'Y', -> 'Y', -> 'Y', -> 'Y', -> 'Y', -> 'Y', -> 'Y', -> 'Y', -> 'Y', -> 'Y', -> 'Y', -> 'Y', -> 'Y', -> 'Y', -> 'Y', -> 'Y', -> 'Y', -> 'Y', -> 'Y', -> 'Y', -> 'Y', -> 'Y', -> '', -> '', -> '', -> '',0,0,0,0,'mysql_native_password','','N'); #重启mysqld /etc/init.d/mysqld start
方法二:
#关闭数据库 [root@db02 mysql-5.7.20]# /etc/init.d/mysqld stop #通用 #启动数据库 [root@db02 mysql-5.7.20]# mysqld_safe --skip-grant-tables --skip-networking & mysql>flush privileges;#刷新受权表,update 修改密码时才能生效,危险 mysql> all on *.* to root@'127.0.0.1' identified by '1' with grant option;#超级用户 #5.7版本,若是用户不存在不能使用grant
方法三:
#导库,在另外一台服务器上导出系统库 mysqldump -uroot -p1 -B mysql >/tmp/mysql.sql
方法四:(不适合生产环境)
#初始化 cd /application/mysql/ rm-fr data/ #注意data目录不要删错
忘记root密码
#关闭数据库 [root@db02 mysql-5.7.20]# /etc/init.d/mysqld stop #启动数据库 [root@db02 mysql-5.7.20]# mysqld_safe --skip-grant-tables --skip-networking & #1.update修改密码 update mysql.user set password=PASSWORD('123') where user='root' and host='localhost'; mysql> flush privileges; #2.set mysql> set password=PASSWORD('1'); #3.grant mysql> grant all on *.* to root@'localhost' identified by '2'; #4.mysqladmin [root@db01 ~]# mysqladmin -uroot -p2 password '123' #5.alter
1)建立用户
mysql> create user oldboy@'10.0.0.%' identified by '123';
2)查看用户
mysql> select user,host from mysql.user;
3)删除用户
mysql> drop user oldboy@‘10.0.0.%’;#drop user sql语句
4)修改密码
select database();#pwd desc mysql.user;查看表权限 #插入表内容 insert into user(user,host.password) values() #进入库里面修改密码,或者使用绝对路径 mysql> set password mysql> update user set password=PASSWORD('oldboy123') where user='root' and host='localhost';#mysql.user mysql> grant all privileges on *.* to oldboy@’10.0.0.%’ identified by ‘123’;
5)用户权限介绍
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 INSERT,SELECT, UPDATE, DELETE on *.* to dev@'xxx';
grant select on mysql.user.user to dev@'10.0.0.5%' identified by '123'; use vip; use tables;
主机域:10.0.0.5% 能够链接:10.0.0.50-59 10.0.0.5
脱敏:脱离敏感信息
grant select(user,host) on wzry.user to no_vip@'%' identified by '123';
数据库集群:10.0.0.51 52 53 54
归属
每次设定只能有一个属主,没有属组或其余用户的概念
grant all privileges on *.* to oldboy@’10.0.0.%’ identified by ‘123’; 权限 做用对象 归属 密码
做用对象分解
. [当前MySQL实例中全部库下的全部表]
wordpress.* [当前MySQL实例中wordpress库中全部表(单库级别)]
wordpress.user [当前MySQL实例中wordpress库中的user表(单表级别)]
思考下面场景:
开发:你把root用户给我呗?
你:emmmmm........ SO?

实验思考问题:
#建立wordpress数据库 create database wordpress; #使用wordpress库 use wordpress; #建立t一、t2表 create table t1 (id int); create table t2 (id int); #建立blog库 create database blog; #使用blog库 use blog; #建立t1表 create table tb1 (id int);
受权:
一、grant select on *.* to wordpress@’10.0.0.5%’ identified by ‘123’; 二、grant insert,delete,update on wordpress.* to wordpress@’10.0.0.5%’ identified by ‘123’; 三、grant all on wordpress.t1 to wordpress@’10.0.0.5%’ identified by ‘123’;
问:
一个客户端程序使用wordpress用户登录到10.0.0.51的MySQL后,
解:
但列级别是最小级别
create database wordpress; use wordpress; create table t1 (id int); create table t2 (id int); create database blog; use blog; create table tb1 (id int); mysql> show databases; +--------------------+ | Database | +--------------------+ | blog | | wordpress | +--------------------+ mysql> show tables from wordpress; +---------------------+ | Tables_in_wordpress | +---------------------+ | t1 | | t2 | +---------------------+ mysql> show tables from blog; +----------------+ | Tables_in_blog | +----------------+ | tb1 | +----------------+
一、grant select on *.* to wordpress@’10.0.0.5%’ identified by ‘123’; 针对wordpress@'10.0.0.5%' 受权 全部库全部表 查询权限 密码是 123 二、grant insert,delete,update on wordpress.* to wordpress@’10.0.0.5%’ identified by ‘123’; 针对wordpress@'10.0.0.5%' 受权 插入、删除、修改 wordpress库中的全部表 密码是 123 三、grant all on wordpress.t1 to wordpress@’10.0.0.5%’ identified by ‘123’; 针对wordpress@'10.0.0.5%' 受权全部权限 wordpress库中的t1表 密码是123
一个客户端程序使用wordpress用户登陆到10.0.0.51的mysql后
[root@db02 ~]# mysql -uwordpress -p123 -h10.0.0.51 一、对t1(wordpress)表的管理能力? t1:select ,insert,delete,update all 全部权限 二、对t2(wordpress)表的管理能力?t2:select,insert,delete,update insert update delete select 三、对tb1表的管理能力? 只有select
1.若是在不一样级别都包含某个表的管理能力时,权限是相加关系
2.可是咱们不推荐在多级别定义重复权限
3.最经常使用的权限设定方式是单库级别受权,即:wordpres.*[单库级别]
在企业中,开发让你给他开一个MySQL的用户:
grant insert,delete,update on wordpress.* to wordpress@’ identified by ‘123’;
1.权限是什么?insert,delete,update
2.哪一个库,哪几张表?哪些列? wordpress.*
3.你从哪里链接?‘10.0.0.5%’
4.用户名和密码是什么?
5.发邮件,走流程
1.链接工具
mysql
常见的特定于客户机的链接选项:
-u:指定用户
-p:指定密码
-h:指定主机
-P:指定端口
-S:指定sock
-e:指定SQL
--protocol=name:指定链接方式
sqlyog、navicat
应用程序链接MySQL
注意:须要加载对应语言程序的API
2.链接方式
mysql -uroot -poldboy123 -S/application/mysql/tmp/mysql.sock mysql -uroot -poldboy123
mysql -uroot -poldboy123 -h10.0.0.51 -P3306
启动
/etc/init.d/mysqld start service mysqld start systemctl start mysqld mysqld_safe --defaults-file=/etc/my.cnf &
关闭
/etc/init.d/mysqld stop mysqladmin -uroot -poldboy123 shutdown service mysqld stop systemctl stop mysqld kill -9 pid ? killall mysqld ? pkill mysqld ?
出现问题:
- 一、若是在业务繁忙的状况下,数据库不会释放pid和sock文件
- 二、号称能够达到和Oracle同样的安全性,可是并不能100%达到
- 三、在业务繁忙的状况下,丢数据(补救措施,高可用)
1.初始化配置文件的做用
场景:我要启动实例
问题:
1)我不知道个人程序在哪?
2)我也不知道我未来启动后去哪找数据库?
3)未来我启动的时候启动信息和错误信息放在哪?
4)我启动的时候sock文件pid文件放在哪?
5)我启动,大家给了我多少内存?
...
N)我还有不少问题须要在我启动以前告诉我,emmmmm....

--skip-grant-tables --skip-networking --datadir=/application/mysql/data --basedir=/application/mysql --defaults-file=/etc/my.cnf --pid-file=/application/mysql/data/db01.pid --socket=/application/mysql/data/mysql.sock --user=mysql --port=3306 --log-error=/application/mysql/data/db01.err
配置文件读取顺序:

说明:
$MYSQL_HOME/my.cnf >>>>>>/application/mysql/my.cnf
defaults-extra-file>>>>>/tmp/my.cnf
#查询server_id mysql -uroot -p1 -e "show variables like 'server_id'"
--defaults-file:默认配置文件
若是使用./bin/mysqld_safe 守护进程启动mysql数据库时,使用了 --defaults-file= <配置文件的绝对路径> 参数,这时只会使用这个参数指定的配置文件。
思考:
#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
socket文件会生成在哪???文件名叫什么???
/tmp/mysql.sock

优先级结论:
2.初始化配置文件的使用
初始化配置文件功能
1)影响服务端的启动(mysqld)
2)影响到客户端的链接
如何配置初始化配置文件
1)配置标签分类
[client]全部客户端程序
mysql
mysqldump
...
[server]全部服务器程序
mysqld
mysqld_safe
...
1)多套后台进程+线程+内存结构
2)多个配置文件
a.多个端口
b.多个socket文件
c.多个日志文件
d.多个server_id
3)多套数据
启动脚本
2.多实例实战
#建立多个存放配置文件的目录 [root@db02 ~]# mkdir /data/{3307,3308,3309} -p [root@db02 ~]# tree /data/ /data/ ├── 3307 ├── 3308 └── 3309 #建立多个配置文件 [root@db02 ~]# vim /data/3307/my.cnf [mysqld] basedir=/application/mysql datadir=/data/3307/data socket=/data/3307/data/mysql.sock port=3307 log_error=/data/3307/data/3307.err log-bin=/data/3307/mysql-bin server_id=7 pid_file=/data/3307/data/3307.pid [client] socket=/data/3307/mysql.sock ------------------------------------------------------------[root@db02 ~]# vim /data/3308/my.cnf [mysqld] basedir=/application/mysql datadir=/data/3308/data socket=/data/3308/data/mysql.sock port=3308 log_error=/data/3308/data/3308.err server_id=8 pid_file=/data/3308/data/3308.pid ------------------------------------------------------------[root@db02 ~]# vim /data/3309/my.cnf [mysqld] basedir=/application/mysql datadir=/data/3309/data socket=/data/3309/data/mysql.sock port=3309 log_error=/data/3309/data/3309.err server_id=9 pid_file=/data/3309/data/3309.pid ------------------------------------------------------------[root@db02 ~]# tree /data /data ├── 3307 │ └── my.cnf ├── 3308 │ └── my.cnf└── 3309 └── my.cnf
[root@db02 ~]# cd /application/mysql/scripts/ #初始化3307的数据目录 [root@db02 scripts]#./mysql_install_db --defaults-file=/data/3307/my.cnf --user=mysql --basedir=/application/mysql --datadir=/data/3307/data #3308 [root@db02 scripts]# ./mysql_install_db --defaults-file=/data/3308/my.cnf --user=mysql -- basedir=/application/mysql --datadir=/data/3308/data #3309 [root@db02 scripts]# ./mysql_install_db --defaults-file=/data/3309/my.cnf --user=mysql -- basedir=/application/mysql --datadir=/data/3309/data [root@db02 scripts]# tree -L 2 /data /data ├── 3307 │ ├── data │ └── my.cnf ├── 3308 │ ├── data │ └── my.cnf └── 3309 ├── data └── my.cnf
mysqld_safe --defaults-file=/data/3307/my.cnf & mysqld_safe --defaults-file=/data/3308/my.cnf & mysqld_safe --defaults-file=/data/3309/my.cnf & #检查端口 [root@db02 scripts]# netstat -lntup Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp6 0 0 :::3306 :::* LISTEN 13052/mysqld tcp6 0 0 :::3307 :::* LISTEN 13598/mysqld tcp6 0 0 :::3308 :::* LISTEN 13428/mysqld tcp6 0 0 :::3309 :::* LISTEN 13768/mysqld
[root@db02 scripts]# mysqladmin -uroot -p -S/data/3307/data/mysql.sock password '3307' [root@db02 scripts]# mysqladmin -uroot -p -S/data/3308/data/mysql.sock password '3308' [root@db02 scripts]# mysqladmin -uroot -p -S/data/3309/data/mysql.sock password '3309'
[root@db02 scripts]# mysql -uroot -p3307 -S /data/3307/data/mysql.sock [root@db02 scripts]# mysql -uroot -p3308 -S /data/3308/data/mysql.sock [root@db02 scripts]# mysql -uroot -p3309 -S /data/3309/data/mysql.sock #小技巧 #system管理 [root@db01 ~]# vim /usr/lib/systemd/system/mysqld.service [Unit] Description=MySQL Server Documentation=man:mysqld(8) Documentation=https://dev.mysql.com/doc/refman/en/using-systemd.html After=network.target After=syslog.target [Install] WantedBy=multi-user.target [Service] User=mysql Group=mysql ExecStart=/application/mysql/bin/mysqld --defaults-file=/etc/my.cnf #给下路径 LimitNOFILE = 5000 #mysql链接 [root@db02 bin]# vim mysql3309 mysql -uroot -p3309 -S /data/3309/data/mysql.sock [root@db02 bin]# chmod +x mysql3309
修改配置文件
#编辑mysql配置文件 [root@mysql-db01 ~]# vim /etc/my.cnf #在mysqld标签下配置 [mysqld] #主库server-id为1,从库不等于1 server_id =1 #开启binlog日志 log_bin=mysql-bin
建立主从复制用户
#登陆数据库 [root@mysql-db01 ~]# mysql -uroot -poldboy123 #建立rep用户 mysql> grant replication slave on *.* to rep@'10.0.0.%' identified by '123';
修改配置文件
#修改mysql-db02配置文件 [root@mysql-db02 ~]# vim /etc/my.cnf #在mysqld标签下配置 [mysqld] #主库server-id为1,从库必须大于1 server_id =5 #开启binlog日志 log_bin=mysql-bin #重启mysql [root@mysql-db02 ~]# /etc/init.d/mysqld restart #修改mysql-db03配置文件 [root@mysql-db03 ~]# vim /etc/my.cnf #在mysqld标签下配置 [mysqld] #主库server-id为1,从库必须大于1 server_id =10 #开启binlog日志 log_bin=mysql-bin #重启mysql [root@mysql-db03 ~]# /etc/init.d/mysqld restart
==基于binlog日志的主从复制,则必须记住主库的master状态信息==
mysql> show master status; +------------------+----------+ | File | Position | +------------------+----------+ | mysql-bin.000002 | 120 | +------------------+----------+
mysql>change master to master_host='127.0.0.1', master_user='rep', master_password='123', master_log_file='mysql-bin.000001', master_log_pos=120, master_port=3306; start slave; show slave status\G
1.检查网路
ping 127.0.0.
2.检查端口
telnet 127.0.0.1 3307
检查帐号,密码
mysql -urep -p123 -h127.0.0.1 -P 3307