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