MySQL資料庫部署及初始化相關

T1YSL發表於2022-09-01

一、MySQL安裝前系統環境檢測

1.selinux和iptables需要關閉

cat /etc/sysconfig/selinux  
sed -i 's/enable/disable/g' /etc/sysconfig/selinux
chkconfig --list|grep iptables  
chkconfig iptables off  
chkconfig --list|grep iptables

2.I/O排程系統預設是cfq模式,這裡強烈建議使用deadline模式

檢視I/O排程檔案

cat /sys/block/sda/queue/scheduler  
輸出結果為:  
noop anticipatory deadline [cfq]
或者
noop [deadline] cfq

修改I/O排程器,需要在/etc/grub.conf中加入elevator=deadline,保證永久有效
echo “elevator=deadline” >> /etc/grub.conf

3.swap分割槽設定

swappiness值大小對如何使用swap分割槽有很大影響。有0和100兩個極限值,0代表最大限度地使用實體記憶體,然後才使用swap分割槽,這種行為有可能導致記憶體溢位,出現OOM錯誤,從而導致MYSQL被意外kill掉,所以需要謹慎設定。100是積極使用swap分割槽,並把記憶體上邊的資料及時搬到swap分割槽裡(不建議)
這裡建議不分配swap,或者分配4GB就夠了

檢視swappiness檔案:

cat /proc/sys/vm/swappiness
sysctl -a | grepswap  
vm.swap_token_timeout = 300 0  
vm.swappiness = 60

想要修改swappiness的值,編輯/etc/sysctl.conf,加入vm.swappiness的值即可。

4.檔案系統選擇

建議使用xfs檔案系統,相比ext4,它更方便管理,支援動態擴容,刪除檔案也方便

5.作業系統限制

ulimit -a

注意兩個引數

open files max user processes

open files如果設定不合理,而當前伺服器的連線數過多或者表過多時,就可能會出現打不開或者訪問不了表的現象 。預設情況下,linux的最大控制程式碼數為1024個,表示單個程式最多可以訪問1024個檔案控制程式碼,如果超過預設值,就會出現檔案控制程式碼超限的錯誤"too many open files"

max user processes

max user processes 引數的用途是,有時候我們可能會跑很多例項,但發現建立不了新的連線,報出"resource temporarily unavailable"錯誤,表示沒有足夠的資源

為了防止上述兩種報錯,修改系統的軟硬限制,編輯/etc/security/limits.conf,加入限制的相關內容。並重啟作業系統生效。

cat /etc/security/limits.conf 下邊有
*   soft nproc 65535
*   hard nproc 65535
*   soft nofile 65535
*   hard nofile 65535

6.numa關閉

關閉numa功能,可以更好分配記憶體,不需要採取swap方式獲取記憶體。使用swap可能導致資料庫效能下降
關閉方式在BIOS、作業系統中關閉,或者在資料庫啟動過程中關閉

numa --interleave=all /usr/local/mysql/bin/mysqld_safe -defaults-file=/etc/my.cnf &

二、MySQL 5.7版本安裝

建立mysql使用者,指定mysql所在使用者組

groupadd mysql  
useradd -g mysql mysql -s /sbin/nologin

軟體包家目錄(basedir)統一規格放在/usr/local/下面:

cd /usr/local/

解壓mysql軟體包:

tar -zxvf mysql-5.7.14-linux-glibc2.5-x86_64.tar.gz

然後做個軟連線,方便日後升級

ln -s mysql-5.7.14-linux-glibc2.5-x86_64 mysql

給mysql目錄授權

chown mysql:mysql -R mysql

建立mysql資料庫的資料目錄(datadir),可以選擇建立在/data/mysql下

mkdir -p /data/mysql

目錄授權

chown mysql:mysql -R /data/mysql

建立/etc/my.cnf檔案,修改相關配置
vim /etc/my.cnf //修改相關配置

26 [mysqld]  
27 datadir = /data/mysql 新增這一行,指定資料儲存路徑

使用mysqld命令初始化資料庫

cd /usr/local/mysql/bin/  
./mysqld --defaults-file=/etc/my.cnf --basedir=/usr/local/mysql --datadir=/data/mysql/ --user=mysql --initialize

注:如果在初始化過程中加上–initialize引數,表示會生成一個臨時的資料庫初始化密碼,記錄在log-error(錯誤日誌)裡邊, 如果加上–initialize-insecure引數,代表無密碼進入,建議使用生成初始化密碼的方式。

啟動資料庫過程:

cd /usr/local/mysql/bin/  
./mysqld_safe --defaults-file=/etc/my.cnf &

資料庫啟動成功後,進入資料庫的初始化密碼會在/data/mysql/error.log下面:

cat /data/mysql/error.log | grep password

使用初始化密碼進入資料庫之後,修改資料庫root密碼,設定為永不過期:

mysql>set password = 'root123';  
mysql>ALTER USER 'root'@'localhost' PASSWORD EXPIRE NEVER;  
mysql>flush privileges;

##update user set password=password(‘root123’) where user=‘root’;

//低於mysql 5.7版本的資料庫需要安全加固,只保留資料庫中使用者為root、host為localhost的賬號
語句如下:

delete from user where user!='root' or host!='localhost';

關閉資料庫

cd /usr/local/mysql/bin  
./mysqladmin -uroot -proot123 shutdown

非正常關閉,可以kill掉mysql程式

三、information_schema下常用表:

  • tables (記錄所有表到的基本資訊是,訪問該表可收集的統計資訊)
  • processlist(檢視當前資料庫的連線).也可以使用show processlist;
  • GLOBAL_STATUS(檢視資料庫執行的各種狀態值)
  • GLOBAL_VARIABLES(檢視資料庫中的引數)
  • PARTITIONS(資料庫中表分割槽的情況)
  • INNODB_LOCKS、INNODB_TRX、INNODB_LOCK_WAITS這三張表用來監控資料庫中鎖的情況
  • user(用於管理資料庫中的使用者許可權資訊)

四、mysql密碼丟失

1.my.cnf增加一行

在my.cnf裡的[mysqld]下增加skip-grant-tables

重啟

2.帶有–-skip-grant-tables引數啟動跳過許可權表

登不上
看是否可以強制停庫(需要確認),檢視mysql程式號,並kill程式

ps -ef | grep mysql  
mysql 5097 3807 2 12:22 pst/0 00:00:00 /usr/local/mysql/bin/mysqld --defaults-file…
kill -9 5097 3807

然後跳過許可權表引數,重啟資料庫

./mysql_safe --defaults-file=/etc/my.cnf --skip-grant-tables &  mysql

或者

service mysqld start --skip-grant-tables

給root使用者設定新的密碼並重新整理許可權,mysql 5.7之後,mysql庫下的password欄位用authentication_string欄位代替

use mysql;  
update user set authentication_string=password('root') where user='root';  
flush privileges;

五、mysql資料庫連線方式

linux下兩種連線方式TCP/IP連線方式和Socket
TCP/IP方式,mysql檢查一張許可權表,判斷髮起請求的客戶端ip是否允許連線到mysql例項,該表就是mysql庫下的user表

mysql -u username -p password -P port -h IP

UNIX Socket連線方式不是網路協議,只能在mysql客戶端和資料例項在同體臺伺服器時使用。可以在配置檔案中指定套接字檔案的路徑

如socket=/tmp/mysql.sock  
mysql -u username -p password -S /tmp/mysq.sock

六、使用者許可權

超管許可權使用者和普通使用者

1.超戶

超管: root和all privileges許可權使用者

mysql 5.6

use mysql;  
select user,host,password from user;
##root

mysql 5.7

use mysql;  
select user,host,authentication_string from user;
##root  
##mysql.sys

image.png


2.普通使用者

create user 使用者名稱@主機ip identified by ‘密碼’;
為了資料庫的安全性,主機IP避免使用%,可以分配IP地址的一個網段 。注意許可權問題

給開發人員的許可權分配規則,可以只分配只讀許可權和讀寫許可權
注:不要給使用者建表,改表(create,alter)等許可權
只讀許可權只能查詢,不能進行DML操作
讀寫許可權包含insert、update、delete、select

例:
只讀使用者:

create user 'usr_read'@'172.20.10.%' identified by 'mysql123';  
grant select on dbname.* to 'usr_read'@'172.20.10.%'  identified by 'mysql123';  
flush privileges;

讀寫使用者:

create user 'usr_readwrite'@'172.20.10.%' identified by 'mysql123';  
grant select,insert,update,delete on dbname.* to 'usr_read'@'172.20.10.%' identified by 'mysql123';  
flush privileges;


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69990629/viewspace-2913038/,如需轉載,請註明出處,否則將追究法律責任。

相關文章