一、MySQL5.6與MySQL5.7的區別
1.編譯安裝區別
#5.7在編譯安裝的時候多了一個boostorg庫
[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 \
#開啟BOOST庫
-DDOWNLOAD_BOOST=1 \
#指定boost庫位置
-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
2.初識化時的區別
#5.6版本初識化
[root@db02 ~]# cd /usr/local/mysql/scripts/
[root@db02 scripts]# ./mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
#5.7版本初識化
[root@db02 scripts]# /usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
--initialize 生成一個隨機密碼寫到一個文件
--initialize-insecure 不生成隨機密碼
3.mysql5.7跟mysql5.6區別
1.mysql5.7 提供json格式數據
2.mysql5.7 支持多主一從
3.做高可用方式不同
二、mysql用戶權限管理
|
Linux系統 |
mysql數據庫 |
| 用戶的作用 |
1.登錄系統 2.啟動進程 3.文件權限 |
1.登錄數據庫 2.管理數據庫 |
| 創建用戶 |
1.useradd 2.adduser |
1.grant 2.create user root@'localhost' 3.insert |
| 刪除用戶 |
1.userdel -r |
1.drop user root@'localhost' 2.delete |
| 修改用戶 |
1.usermod |
1.update |
| 查看用戶 |
1.id 2.passwd |
1.select user from mysql.user; |
1.在MySQL中,用戶是怎么定義的
#mysql中,定義一個用戶是:
用戶名@'主機域'
#用戶名寫法:
用戶名如果是字符:
mysql> create user root@'10.0.0.1';
用戶名是數字需要加引號:
mysql> create user '123'@'10.0.0.1';
#主機域的寫法:
localhost
127.0.0.1
172.16.1.51
db01
172.16.1.%
172.16.1.5% #172.16.1.50-59
172.16.%.%
172.%.%.%
%
10.0.0.0/255.255.255.0
10.0.0.0/24 #可以設置,但是不生效
2.用戶的管理
1)創建用戶
mysql> create user root@'localhost';
mysql> grant all on *.* to root@'localhost' identified by '123';
mysql> insert ...
2)查看用戶
mysql> select user,host from mysql.user;
3)修改用戶密碼
1.命令行使用mysqladmin修改密碼
[root@db02 ~]# mysqladmin -uroot -p123 password 123456
2.update修改用戶密碼
mysql> update mysql.user set password=PASSWORD('123') where user='root' and host='localhost';
3.修改當前用戶密碼
mysql> set password=password('123456');
4.grant修改密碼
mysql> grant all on *.* to root@'localhost' identified by '123';
mysql> flush privileges;
4)刪除用戶
mysql> drop user qiudao@'10.0.0.0/24';
5)忘記root用戶密碼怎么辦
1.停止數據庫
systemctl stop mysqld
2.跳過授權表和網絡啟動
mysqld_safe --skip-grant-tables --skip-networking &
3.登錄數據庫
mysql
4.修改密碼
mysql> flush privileges;
mysql> grant all on *.* to root@'localhost' identified by '123';
mysql> flush privileges;
5.退出重啟數據庫
mysqladmin -p123 shutdown
systemctl start mysql
3.權限的管理
1)授權命令
grant all on *.* to root@'localhost' identified by '123';
grant all privileges on *.* to root@'localhost' identified by '123';
grant #授權命令
all privileges #權限(所有權限)
on #在...上
*.* #所有庫.所有表
to #給
root@'localhost' #用戶名@'主機域'
identified #設置密碼
by #是
'123'; #'密碼'
2)所有權限
#查看用戶權限
mysql> show grants for lhd@'10.0.0.0/255.255.255.0';
#回收權限
mysql> revoke drop on *.* from lhd@'10.0.0.0/255.255.255.0';
#所有權限
SELECT, INSERT, UPDATE, DELETE, CREATE, 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, DROP, GRANT
3)作用對象
#授權root@'localhost'對所有庫所有表擁有所有權限,密碼是123
grant all on *.* to root@'localhost' identified by '123'; #所有庫所有表授權
#授權root@'localhost'對wordpress庫下所有表擁有所有權限,密碼是123
grant all on wordpress.* to root@'localhost' identified by '123'; #單庫授權
#授權root@'localhost'對wordpress庫下所有表擁有查看,插入,修改的權限,密碼是123(最常用)
grant select,insert,update on wordpress.* to root@'localhost' identified by '123'; #指定權限單庫授權
#授權root@'localhost'用戶對mysql庫下的user表擁有查看,插入,修改的權限,密碼是123
grant select,insert,update on mysql.user to root@'localhost' identified by '123'; #單表授權
#在企業中,單列授權被稱為脫敏
grant select(user) on mysql.user.host to root@'localhost' identified by '123'; #單列授權
4)在企業里權限設定
#開發跟你要一個數據庫用戶
0.你需要什么權限?
1.你要操作什么庫,有沒有指定表?
2.你要什么用戶?
3.你從哪台主機連過來?
4.密碼你有沒有要求?
5.這個用戶你要用多久?
6.走流程,發郵件?
#一般情況給開發的權限
grant select,update,insert on dev.* to dev@'172.16.1.50' identified by 'QiuDao@123';
#開發:你把root用戶給我唄?
4.權限設置實踐
1)准備數據庫
#創建wordpress數據庫
create database wordpress;
#使用wordpress庫
use wordpress;
#創建t1、t2表
create table t1 (id int);
create table t2 (id int);
#創建blog庫
create database blog;
#使用blog庫
use blog;
#創建t1表
create table tb1 (id int);
2)授權
#授權wordpress@'10.0.0.5%'對於所有庫所有表有查看權限,密碼是123
1.grant select on *.* to wordpress@'10.0.0.5%' identified by '123';
#授權wordpress@'10.0.0.5%'對於wordpress下所有表有插入,刪除,修改權限,密碼是123
2.grant insert,delete,update on wordpress.* to wordpress@'10.0.0.5%' identified by '123';
#授權wordpress@'10.0.0.5%'對於wordpress下t1表所有權限,密碼123
3.grant all on wordpress.t1 to wordpress@'10.0.0.5%' identified by '123';
3)提問
#有一個人,使用wordpress用戶通過10.0.0.51登錄數據庫,請問
1.對於t1表,有哪些操作權限?
所有權限
2.對於t2表,有哪些操作權限?
增、刪、改、查
3.對於tb1表,有哪些操作權限?
查
4)總結
1.如果不在同一級別授權,權限是相加關系
2.但是我們不推薦在多級別定義重復權限。
3.最常用的權限設定方式是單庫級別授權
即:grant select,update,insert on dev.* to dev@'172.16.1.50' identified by 'QiuDao@123';
4.如果涉及到敏感信息,我們使用脫敏,即單列授權
grant select(user) on mysql.user.host to root@'localhost' identified by '123';
5.查看用戶權限
show grants for 用戶名@'主機域';
三、mysql連接管理
1.連接工具
1)mysql自帶的連接工具 mysql
#mysql 常用的參數
-u: #指定用戶 mysql -uroot
-p: #指定用戶的密碼 mysql -uroot -p123
-h: #指定連接的主機 mysql -uroot -p123 -h172.16.1.51
-S: #指定socket文件 mysql -uroot -p123 -S /tmp/mysql.sock
-P: #指定端口 mysql -uroot -p123 -P3307
-e: #庫外執行sql語句 mysql -uroot -p123 -e 'show databases'
2)第三方連接工具
1.navicat
2.sqlyog
3.phpmyadmin
2.連接方式
1)socket連接
mysql -uroot -p123
mysql -uroot -p123 -S /tmp/mysql.sock
2)TCP/IP連接
mysql -uroot -p123 -h 172.16.1.51
四、mysql啟動關閉流程
1.啟動數據庫
1.systemctl start mysql
2./etc/init.d/mysqld start
3.mysqld_safe --defaults-file=/etc/my.cnf
4.mysqld --defaults-file=/etc/my.cnf
#最終都是mysqld_safe啟動,mysqld守護進程在后台
2.關閉數據庫
#正經關閉數據
1.systemctl stop mysql
2./etc/init.d/mysqld stop
3.mysqldadmin -uroot -p123 shutdown
#不正經關閉數據庫
1.kill -9 mysqlpid
2.killall mysqld
3.pkill mysqld
#后果:
1.如果業務量很大,數據庫不會立刻關閉,只是停止服務,pid文件和socket文件還存在
2.如果業務量很大,會丟失數據
五、mysql配置管理
1.配置文件作用
1)我不知道我的程序在哪?
--basedir=
2)我也不知道我將來啟動后去哪找數據庫數據?
--datadir
3)將來我啟動的時候啟動信息和錯誤信息放在哪?
$datadir/db01.err
4)我啟動的時候sock文件pid文件放在哪?
$datadir/mysql.pid
5)我啟動,你們給了我多少內存?
2.預編譯階段
cmake . -DCMAKE_INSTALL_PREFIX=/application/mysql-5.6.20 \
-DMYSQL_DATADIR=/application/mysql-5.6.20/data \
-DMYSQL_UNIX_ADDR=/application/mysql-5.6.20/tmp/mysql.sock \
-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
3.配置文件
vim /etc/my.cnf
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
socket=/tmp/mysql.sock
1)配置文件位置
/etc/my.cnf
/etc/mysql/my.cnf
$MYSQL_HOME/my.cnf(前提是在環境變量中定義了MYSQL_HOME變量)
defaults-extra-file (類似include)
~/my.cnf
3.命令行
mysqld_safe
--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