MySQL管理员篇
2019獨角獸企業(yè)重金招聘Python工程師標準>>>
安裝與升級
二進制包安裝
依賴
mysql依賴libaio庫,如果沒有這個庫,數(shù)據(jù)目錄和啟動mysql會失敗
shell> groupadd mysql
shell> useradd -r -g mysql mysql
shell> cd /usr/local
shell> tar zxvf /path/to/mysql-VERSION-OS.tar.gz
shell> ln -s full-path-to-mysql-VERSION-OS mysql
shell> cd mysql
shell> mkdir mysql-files
shell> chmod 770 mysql-files
shell> chown -R mysql .
shell> chgrp -R mysql .
shell> bin/mysql_install_db --user=mysql ? ?# Before MySQL 5.7.6
shell> bin/mysqld --initialize-security ?--user=mysql # MySQL 5.7.6 and up
shell> bin/mysql_ssl_rsa_setup ? ? ? ? ? ? ?# MySQL 5.7.6 and up
shell> chown -R root .
shell> chown -R mysql data mysql-files
shell> bin/mysqld_safe --user=mysql &
# Next command is optional
shell> cp support-files/mysql.server /etc/init.d/mysql.server
源碼安裝
依賴
CMake
make
ansi c++編譯器
如果想要運行test腳本,perl被需要
步驟
groupadd mysql
useradd -r -g mysql mysql
tar zxvf mysql-version.tar.gz
cd mysql-version
cmake . ? ? ? ? ? ? ? ? ? ? ? ?[這里可以攜帶參數(shù)]-DCMAKE_INSTALL_PREFIX=安裝目錄
make
make install
cd /usr/local/msyql
chown -R mysql:mysql .
bin/mysql_install_db --user=mysql [5.7.6之前版本]
bin/mysqld --initialize-insecure --user=mysql [5.7.6 及以后版本]
bin/mysql_ssl_rsa_setup [5.7.6 及以后需版本]
chown -R root .
chown -R mysql:mysql 數(shù)據(jù)庫數(shù)據(jù)目錄?
bin/mysqld_safe --user=mysql &
升級
yum包升級
yum update mysql-server
重啟mysql服務器
運行mysql_upgrade
步驟
方案一
停止mysql5.6服務器
升級mysql-server
啟動mysql服務器
運行mysql_upgrade
方案二
mysqldump --all-databases --routings --events --add-drop-tables --flush-privileges=0 > data-for-upgrade.sql
停止mysql5.6服務器
安裝mysql5.7
初始化數(shù)據(jù)目錄 mysqld --initialize --datadir=目錄
啟動服務器使用新的數(shù)據(jù)目錄
mysql>source data-for-upgrade.sql
運行mysql_upgrade升級系統(tǒng)表等
如果跨越多個主版本號,如5.5升級到5.7,建議先5.5升級5.6,再5.6升級5.7
升級5.5到5.6
啟動新的數(shù)據(jù)庫
運行mysql_upgrade
升級5.6到5.7
啟動新的數(shù)據(jù)庫
運行mysql_upgrade
降級
在安裝目錄中找到mysql_system_tables_fix_for_downgrade.sql文件
mysql < mysql_system_tables_fix_for_downgrade.sql
備份所有表 mysqldump --all-databases > dump.sql
停止mysql數(shù)據(jù)庫,啟動老版本的數(shù)據(jù)庫
mysql < dump.sql
重啟老板數(shù)據(jù)庫
由于不同的版本數(shù)據(jù)庫引擎可能不同,需要將新版本中表的數(shù)據(jù)庫引擎改成老版本的數(shù)據(jù)庫引擎,如 alter table tab_name ENGINE=MyISAMA STATS_PRESISTENT=DEFAULT
拷貝數(shù)據(jù)庫到另外一臺主機
mysqladmin -h 'other_hostname' create db_name
mysqldump db_name | mysql -h 'other_hostname' db_name
從遠程主機拷貝數(shù)據(jù)
mysqladmin create db_name
mysqldump -h 'other_hostname' --compress db_name | mysql db_name
安全
安全向?qū)?/strong>
使用mysql -u root 測試連接root用戶是否需要輸入密碼
使用show grants查看用戶的訪問權(quán)限
不要存明文密碼,可以使用SHA2,SHA1,MD5轉(zhuǎn)化后存
保持密碼安全
終端用戶的密碼安全
使用mysql登錄選項p時,不要直接指定密碼
將密碼存在配置文件中,[client] 節(jié)點下的password=yourpassword,然后保證利用系統(tǒng)的權(quán)限機制保證該配置文件的訪問權(quán)限
使用mysql_config_editor保存密碼,會生成.mylogin.cnf文件,mysql會讀取該文件
mysql_config_editor set --user=root --socket=/var/run/mysql/mysql.sock --password
mysql_config_editor set --user=root --host=127.0.0.1 --port=3306 --socket=/var/run/mysql/mysql.sock --password
管理員的密碼安全
mysql密碼存放在mysql.user表中,非管理員用戶不應該具有訪問該表的權(quán)限
密碼和日志
直接使用insert,update操作mysql.user表中的密碼字段,可能會被明文寫到日志里面去
create user , grant,set password,密碼字段在日志會被隱藏
使得mysql防御攻擊
確保每個用戶都有密碼
確保只有運行mysqld的用戶具有對數(shù)據(jù)庫數(shù)據(jù)目錄的讀寫權(quán)限
絕不要用root用戶運行mysql服務器
不要授權(quán)file,process,super權(quán)限給非管理員用戶
mysql權(quán)限訪問系統(tǒng)
mysql提供的權(quán)限
權(quán)限分類
管理員權(quán)限
數(shù)據(jù)庫權(quán)限
數(shù)據(jù)庫對象權(quán)限(表,索引等)
權(quán)限名
CREATE ? ? ? ? ? ? ? ? ? ? ? ? ? ? databases, tables, or indexs
DROP ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?databases, tables, or indexs
GRANT_OPTION ? ? ? ? ? ? ? databases, tables, or stored routines, 允許你授權(quán)的權(quán)限
LOCK_TABLES ? ? ? ? ? ? ? ? ? databases
REFERENCES ? ? ? ? ? ? ? ? ? ? databases or tables
EVENT ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? databases or tables
ALTER ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?tables
DELETE ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?tables
INDEX ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?tables
INSERT ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? tables or columns
SELECT ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? tables or columns
UPDATE ? ? ? ? ? ? ? ? ? ? ? ? ? ? tables or columns
CREATE TEMPORARY TABLES ? ? ? ? ? ? tables
TRIGGER ? ? ? ? ? ? ? ? ? ? ? ? ? ?tables
CREATE VIEW ? ? ? ? ? ? ? ? ? ?views
SHOW VIEW ? ? ? ? ? ? ? ? ? ? ?views
ALTER ROUTINE ? ? ? ? ? ? ? ?stored routines
CREATE ROUTINE ? ? ? ? ? ? ?stored routines
EXECUTE ? ? ? ? ? ? ? ? ? ? ? ? ? ?stored routines
FILE ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?file accesss on server host
CREATE ?TABLESPACE ? ? ?server administration
CREATE USER ? ? ? ? ? ? ? ? ? ?server administration
PROCESS ? ? ? ? ? ? ? ? ? ? ? ? ? server administration
PROXY ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? server administration
RELOAD ? ? ? ? ? ? ? ? ? ? ? ? ? ?server administration
REPLICATION CLIENT ? ? ? server administration, 運行用戶使用show master status,show slave status 和show binary logs
REPLICATION SLAVE ? ? ? ?server administration
SHOW DATABASES ? ? ? ? ?server administration
SHUTDOWN ? ? ? ? ? ? ? ? ? ? server administration
SUPER ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? server administration
ALL ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?server administration ? ? ? ? ?代表所有權(quán)限除了GRANT_OPTION
USAGE ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? server administration
用戶賬戶管理
添加用戶
CREATE USER 'monty'@'localhost' IDENTIFIED BY 'some_pass';
GRANT ALL PRIVILEGES ON *.* TO 'monty'@'localhost'
刪除用戶
DROP USER 'jeffrey'@'localhost';
用戶密碼修改
ALTER USER 'jeffrey'@'localhost' IDENTIFIED BY 'mypass'; ?5.7.6 以及以后版本修改指定用戶密碼
ALTER USER USER() IDENTIFIED BY 'mypass' ? ? ? ? ? ? ? ? ? ? ? ? 5.76 以及以后版本修改當前連接用戶密碼 ?
SET PASSWORD FOR 'jeffrey'@'localhost' = PASSWORD('mypass'); ? ? ? ?5.7.6 之前版本修改指定用戶密碼
GRANT USAGE ON *.* TO 'jeffrey'@'localhost' IDENTIFIED BY 'mypass'; ?5.7.6 之前版本修改指定用戶密碼
SET PASSWORD = PASSWORD('mypass'); ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?5.76 以及以后版本修改當前連接用戶密碼
密碼過期代理
修改密碼為過期
ALTER USER 'jeffrey'@'localhost' PASSWORD EXPIRE;
配置全局的密碼過期時間【5.7.6以后支持】
[mysqld]
default_password_lifetime=180 ? ? ? ? ? ? ? ? ? ? ? ? ? ? #天
SET GLOBAL default_password_lifetime = 180;
針對某個用戶配置
ALTER USER 'jeffrey'@'localhost' PASSWORD EXPIRE INTERVAL 90 DAY;?
ALTER USER 'jeffrey'@'localhost' PASSWORD EXPIRE NEVER; ? ? ?取消密碼失效
插件的安裝
服務器端
配置文件my.cnf的mysqld節(jié)點添加plugin-load=test_plugin_server=auth_test_plugin.so其中test_plugin_server是插件名,auth_test_plugin.so是插件所在的so
或者
mysql> INSTALL PLUGIN test_plugin_server SONAME 'auth_test_plugin.so';
客戶端
--default-auth=plugin_name選項使得mysql client使用新的插件連接服務器
代理用戶
當客戶端用代理用戶連接到mysql服務器,插件必須返回被代理的用戶名
代理用戶必須安裝認證插件
代理用戶必須具有proxy權(quán)限?
eg
CREATE USER 'empl_external'@'localhost' IDENTIFIED WITH auth_plugin AS 'auth_string';
CREATE USER 'employee'@'localhost' IDENTIFIED BY 'employee_pass';
GRANT PROXY ON 'employee'@'localhost' TO 'empl_external'@'localhost';
啟停
啟動
mysqld
mysqld_safe
mysqld.server
mysqld_mutil
mysqld_multi [options] {start|stop|reload|report} [GNR[,GNR] ...]
配置文件的例子
# This file should probably be in your home dir (~/.my.cnf)
# or /etc/my.cnf
# Version 2.1 by Jani Tolonen
[mysqld_multi]
mysqld ? ? = /usr/local/bin/mysqld_safe
mysqladmin = /usr/local/bin/mysqladmin
user ? ? ? = multi_admin
password ? = multipass
[mysqld2]
socket ? ? = /tmp/mysql.sock2
port ? ? ? = 3307
pid-file ? = /usr/local/mysql/var2/hostname.pid2
datadir ? ?= /usr/local/mysql/var2
language ? = /usr/local/share/mysql/english
user ? ? ? = john
[mysqld3]
socket ? ? = /tmp/mysql.sock3
port ? ? ? = 3308
pid-file ? = /usr/local/mysql/var3/hostname.pid3
datadir ? ?= /usr/local/mysql/var3
language ? = /usr/local/share/mysql/swedish
user ? ? ? = monty
[mysqld4]
socket ? ? = /tmp/mysql.sock4
port ? ? ? = 3309
pid-file ? = /usr/local/mysql/var4/hostname.pid4
datadir ? ?= /usr/local/mysql/var4
language ? = /usr/local/share/mysql/estonia
user ? ? ? = tonu
[mysqld6]
socket ? ? = /tmp/mysql.sock6
port ? ? ? = 3311
pid-file ? = /usr/local/mysql/var6/hostname.pid6
datadir ? ?= /usr/local/mysql/var6
language ? = /usr/local/share/mysql/japanese
user ? ? ? = jani
停止
mysqladmin shutdown
備份和恢復
備份和恢復
備份的類型
物理備份和邏輯備份
物理備份適用于大的數(shù)據(jù),需要快速恢復
邏輯備份適用于小的數(shù)據(jù),可以在不同的機器間恢復
在線備份和離線備份
本地備份和遠程備份
快照備份
全量備份和增量備份
備份的方法
mysqldump
對于innodb數(shù)據(jù)庫,使用--single-transaction可以實現(xiàn)online備份
直接copy數(shù)據(jù)庫文件
分隔符文件備份
SELECT * INTO OUTFILE ? ? ?'file_name' FROM ? ? ?tbl_name
利用二進制日志增量備份
當服務使用--log-bin之后,可以使用增量備份
備份和恢復的列子
備份
全量備份
mysqldump --single-transaction --all-databases > backup_sunday_1_PM.sql
增量備份
flush logs后拷貝二進制日志
恢復
使用全量備份文件恢復
mysql < back_sunday_1_PM.sql
使用增量備份文件恢復
mysqlbinlog ?mysql-bin.xxxxx | mysql
使用mysqldump產(chǎn)生分隔符備份文件
mysqldump --tab=/tmp --fields-terminated-by=, --fields-enclosed-by='"' --lines-terminated-by=0x0d0a db1
使用分隔符文件恢復
USE db1;
LOAD DATA INFILE 't1.txt' INTO TABLE t1 FIELDS TERMINATED BY ',' FIELDS ENCLOSED BY '"' LINES TERMINATED BY '\r\n'
或者
mysqlimport --fields-terminated-by=, fields-enclosed-by='"' --lines-terminated-by=0x0d0a db1 t1.txt
使用復制(replication )來備份
使用mysqldump備份從服務器
1)mysqladmin stop-slave 或者 mysql -e 'STOP SLAVE SQL_THREAD;'
2)mysqldump --all-databases > fulldb.dump
3)mysqladmin start-slave
從從服務器備份原始數(shù)據(jù)
1)mysqladmin shutdown
2)tar cf /tmp/dbbackup.tar ./data
3)mysqld_safe &
innodb的備份和恢復
熱備份
使用mysqlbackup
冷備份
1)slow shutdown
2)復制innodb的數(shù)據(jù)文件(ibdata 文件和 .idb文件)
3)復制.frm文件
4)復制my.cnf配置文件
轉(zhuǎn)載于:https://my.oschina.net/465759695/blog/498949
總結(jié)
- 上一篇: iap备忘录
- 下一篇: 分布式中Redis实现Session终结