目錄python
[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
Linux用戶的做用:c++
Linux用戶管理:sql
MySQL用戶的做用:shell
MySQL用戶管理:數據庫
1)建立用戶:create user 、grantvim
#建立用戶 create user zls@'%'; #建立用戶同時給密碼(5.7)若是用戶不存在無法使用grant create user qls@'%' identified by '123'; grant all on *.* to qls@'%';
2)刪除用戶:delete user 、drop user安全
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)
3)修改用戶:update 、 alter 、 grant服務器
mysql> update mysql.user set password=PASSWORD('123') where user='root' and host='localhost';
MySQL用戶的定義:網絡
1) username@’主機域’
2) 主機域:能夠理解爲是MySQL登錄的白名單
3) 主機域格式:
root@'%' select root@'localhost' 超級用戶 root@'127.0.0.1' 超級用戶 root@'10.0.0.%' root@'10.%.%.%' root@'10.0.0.0/255.255.255.0' root@'db01' mysql> select user,host from mysql.user; +------+-----------+ | user | host | +------+-----------+ | root | localhost | +------+-----------+ 1 row in set (0.00 sec)
MySQL用戶管理實戰
剛裝完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 #啓動數據庫(加上參數後,不能使用tcp鏈接,只能socket鏈接,保證安全性) [root@db02 mysql-5.7.20]# mysqld_safe --skip-grant-tables --skip-networking & --skip-grant_tables #跳過受權表 [root@db01 bin]# mysqld_safe --skip-grant-tables --skip-networking & --skip-networking # 跳過網絡(安全) mysql> insert into user(user,host,password) values('root','localhost',PASSWORD('123')); mysql> insert into user(user,host,password,ssl_cipher,x509_issuer,x509_subject) values('root','localhost',PASSWORD('123'),'null','null','null');
忘記root密碼
先中止數據庫 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.%’;
4)修改密碼
mysql> set password mysql> update user set password=PASSWORD('oldboy123') where user='root' and host='localhost'; 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';
主機域: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表(單表級別)] 單列級別,是最小級別
#建立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); mysql> show databases; +--------------------+ | Database | +--------------------+ | blog | | wordpress | +--------------------+ mysql> show tables from mysql; +---------------------------+ | 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
問:
一個客戶端程序使用wordpress用戶登錄到10.0.0.51的MySQL後,
解:
結論:
一、若是在不一樣級別都包含某個表的管理能力時,權限是相加關係。
二、可是咱們不推薦在多級別定義重複權限。
三、最經常使用的權限設定方式是單庫級別受權,即:wordpress.* 【單庫級別】
3.企業中權限的設定
開發人員說:請給我開一個用戶
溝通:
#通常給開發建立用戶權限 grant select,update,delete,insert on *.* to oldboy@’10.0.0.%’ identified by ‘123’;
1.鏈接工具
1)MySQL自帶的鏈接工具
mysql 常見的特定於客戶機的鏈接選項: -u:指定用戶 -p:指定密碼 -h:指定主機 -P:指定端口 -S:指定sock -e:指定SQL --protocol=name:指定鏈接方式
2)第三方的鏈接工具
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 ------> mysqld_safe ------> mysqld service mysqld start systemctl start mysqld mysqld_safe --defaults-file=/etc/my.cnf &
關閉
/etc/init.d/mysqld stop service mysqld stop systemctl stop mysqld mysqladmin -uroot -poldboy123 shutdown #雖然能夠關閉,可是不可用。 會損壞文件,可能致使丟失,沒法恢復 (kill -9 pid ? killall mysqld ? pkill mysqld ?)
出現問題:
- 一、若是在業務繁忙的狀況下,數據庫不會釋放pid和sock文件
- 二、號稱能夠達到和Oracle同樣的安全性,可是並不能100%達到
- 三、在業務繁忙的狀況下,丟數據(補救措施,高可用)
1.初始化配置文件的做用
場景:我要啓動實例
問題:
1)程序在哪?
2)未來啓動後去哪找數據庫?
3)未來我啓動的時候啓動信息和錯誤信息放在哪?
4)啓動的時候sock文件pid文件放在哪?
5)給了多少內存?
...
--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
配置文件讀取順序:
/etc/my.cnf server_id=1 /etc/mysql/my.cnf server_id=2 /application/mysql/my.cnf server_id=3 ~/.my.cnf server_id=4 [root@db02 ~]# mysql -uroot -p123 -e "show variables like 'server_id'" Warning: Using a password on the command line interface can be insecure. +---------------+-------+ | Variable_name | Value | +---------------+-------+ | server_id | 4 | +---------------+-------+
--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
優先級結論:
1.命令行優先級最高
2.--defaults-file
3.配置文件讀取順序反着來
4.cmake優先級最低
2.初始化配置文件的使用
初始化配置文件功能
1)影響實例的啓動(mysqld)
2)影響到客戶端
如何配置初始化配置文件
1)配置標籤分類
[client]全部客戶端程序 mysql mysqldump ... [server]全部服務器程序 mysqld mysqld_safe ...
什麼是實例?
一個進程+多個線程+預分配的內存結構
什麼是多實例?
多個進程+多個線程+多個預分配內存結構
1)多套後臺進程+線程+內存結構
2)多個配置文件
a. 多個端口
b. 多個socket文件
c. 多個日誌文件
d. 多個server_id
3)多套數據
#建立數據目錄 [root@db01 ~]# mkdir -p /data/330{7..9} #建立配置文件 [root@db01 ~]# touch /data/330{7..9}/my.cnf #編輯3307配置文件 [root@db01 ~]# vim /data/3307/my.cnf [mysqld] basedir=/application/mysql datadir=/data/3307/data socket=/data/3307/mysql.sock log_error=/data/3307/data/3307.err log-bin=/data/3307/mysql-bin pid_file=/data/3307/data/3307.pid server_id=7 port=3307 [client] socket=/data/3307/mysql.sock #編輯3308配置文件 [root@db01 ~]# vim /data/3308/my.cnf [mysqld] basedir=/application/mysql datadir=/data/3308/data socket=/data/3308/mysql.sock log_error=/data/3308/data/3308.err log-bin=/data/3308/mysql-bin pid_file=/data/3307/data/3308.pid server_id=8 port=3308 [client] socket=/data/3308/mysql.sock #編輯3309配置文件 [root@db01 ~]# vim /data/3309/my.cnf [mysqld] basedir=/application/mysql datadir=/data/3309/data socket=/data/3309/mysql.sock log_error=/data/3309/data/3309.err log-bin=/data/3309/mysql-bin pid_file=/data/3307/data/3309.pid server_id=9 port=3309 [client] socket=/data/3309/mysql.sock [root@db02 ~]# tree /data ├── 3307 │ └── my.cnf ├── 3308 │ └── my.cnf └── 3309 └── my.cnf
2.初始化多個datadir
[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]# [root@db02 bin]# tree -L 2 /data /data ├── 3307 │ ├── data │ └── my.cnf ├── 3308 │ ├── data │ └── my.cnf └── 3309 ├── data └── my.cnf
3.啓動多實例
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 bin]# netstat -lntup Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 6724/sshd tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 6869/master tcp6 0 0 :::3306 :::* LISTEN 18090/mysqld tcp6 0 0 :::3307 :::* LISTEN 20554/mysqld tcp6 0 0 :::3308 :::* LISTEN 20384/mysqld tcp6 0 0 :::3309 :::* LISTEN 20724/mysqld tcp6 0 0 :::22 :::* LISTEN 6724/sshd tcp6 0 0 ::1:25 :::* LISTEN 6869/master #查看server_id [root@db01]# mysql -S /data/3307/mysql.sock -e "show variables like 'server_id'" [root@db01]# mysql -S /data/3308/mysql.sock -e "show variables like 'server_id'" [root@db01]# mysql -S /data/3309/mysql.sock -e "show variables like 'server_id'"
4.設置密碼
[root@db02 scripts]# mysqladmin -uroot -p -S/data/3307/mysql.sock password '3307' [root@db02 scripts]# mysqladmin -uroot -p -S/data/3308/mysql.sock password '3308' [root@db02 scripts]# mysqladmin -uroot -p -S/data/3309/mysql.sock password '3309'
5.鏈接MySQLroot
[root@db02 scripts]# mysql -uroot -p3307 -S /data/3307/mysql.sock [root@db02 scripts]# mysql -uroot -p3308 -S /data/3308/mysql.sock [root@db02 scripts]# mysql -uroot -p3309 -S /data/3309/mysql.sock #小技巧 [root@db02 bin]# vim mysql3309 mysql -uroot -p3309 -S /data/3309/mysql.sock [root@db02 bin]# chmod +x mysql3309