【小白福利—初級DBA入門必看】MySQL常用工具介紹——安裝篇

之前Amy爲大家更新了基於MySQL的分佈式事務數據庫的開發規範和MySQL數據類型測試點此查看系列文章,考慮到很多剛入門的初級DBA可能對MySQL工具的使用也不甚熟練,Amy決定接下來爲大家更新一系列介紹MySQL的常用工具的文章,讓大家對MySQL的使用更加得心應手。

今天先更新MySQL工具的幾種安裝方式,大家可以自由選擇哦。

  • 使用yum或rpm在linux安裝、初始化、使用MySQL 5.7

1.1 安裝部分
1.1.1 安裝過程
yum安裝方式
#先通過wget從官網下載相應平臺的MySQL的yum倉庫,然後執行安裝。
#此步驟自動配置好MySQL的yum源,後續可以方便地安裝MySQL官方相關軟件。
wget: https://repo.mysql.com//mysql80-community-release-el7-2.noarch.rpm
yum -y localinstall mysql80-community-release-el7-2.noarch.rpm

#由於該倉庫默認啓用的是mysql80庫,想要安裝mysql57還需將mysql80庫禁用並將mysql57啓用。這裏使用如下方式修改倉庫配置
yum-config-manager --disable mysql80-community
yum-config-manager --enable mysql57-community

#安裝MySQL,這會依次安裝:
#mysql-community-common #cs共同的錯誤信息和字符集包
#mysql-community-libs #共享客戶端庫,會替換mariadb-libs
#mysql-community-client #客戶端包
#mysql-community-server
#mysql-community-libs-compat #會替換mariadb-libs
yum install mysql-community-server

rpm安裝方式
#通過官網下載等方式獲取對應平臺以下幾個rpm包,並將其上傳至所要安裝的平臺上,執行以下命令,則會依次安裝好這幾個包
#mysql-community-common #cs共同的錯誤信息和字符集包
#mysql-community-libs #共享客戶端庫,會替換mariadb-libs
#mysql-community-client #客戶端包
#mysql-community-server
#mysql-community-libs-compat #會替換mariadb-libs
yum -y install mysql-community-{server,client,common,libs}-* mysql-5.* --exclude=‘minimal

1.1.2 安裝說明
安裝佈局:即安裝完畢後會創建的文件或目錄。若安裝完畢後不修改配置直接啓動服務器,則數據目錄等設置和下表相同。

安裝會覆蓋/etc/my.cnf的內容,裏面啓用了幾個重要參數,和上述佈局相同。若願意,可以在啓動服務器前,修改該配置文件,如將數據目錄放置在其它地方:
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
#Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
安裝完畢,MySQL還會給我們創建一個mysql用戶和mysql基本組
[root@centip10 ~ 20:59:12]# cat /etc/passwd | grep mysql
mysql❌27:27:MySQL Server:/var/lib/mysql:/bin/false

1.2 yum、rpm初始化部分及啓動
對於yum和rpm方式安裝的MySQL,可以在安裝後直接啓動服務器(如centos6可以使用service mysqld start;centos7還可以使用systemctl start mysqld)。
若啓動時檢測到數據目錄爲空或不存在,則會初始化數據目錄:
1)初始化服務器;
2)在數據目錄中生成SSL證書和密鑰文件;
3)安裝並啓用validate_password:要求密碼小寫、大寫、數字、特殊字符都存在,長度不小於8
4)創建’root’@'localhost超級用戶帳戶。臨時密碼存儲在錯誤日誌文件中,查看命令爲:
grep ‘temporary password’ /var/log/mysqld.log

注意:對於5.6,該過程調用mysql_install_db,初始密碼爲空。當然也可以手動先初始化數據目錄,mysql_install_db --random-passwords,給root賬戶生成一個隨機密碼,密碼保存在用戶主目錄下.mysql_secret。
1.3 使用mysql連接服務器並修改密碼
使用mysql -p命令,並輸入由1.2中找到的密碼,當可以成功連接到服務器,此後必須先修改密碼才能執行其他語句:
ALTER USER ‘root’@‘localhost’ IDENTIFIED BY ‘MyNewPass4!’; #5.6要使用SET PASSWORD = PASSWORD(‘new_password’);
quit #退出mysql

**- 2 .使用通用二進制安裝、源代碼在linux安裝、初始化、使用MySQL 5.7

2.1 安裝部分**
通用二進制安裝部分
#以從官網下載等方式獲取平臺對應的通用二進制包,並上傳至平臺,在該包目錄執行解壓將其解壓至/usr/local/目錄,重命名爲mysql
tar zxvf mysql-5.7.26-el7-x86_64.tar.gz -C /usr/local/
rm -r /usr/local/mysql
mv /usr/local/mysql-5.7.26-el7-x86_64 /usr/local/mysql

源安裝部分
#先安裝依賴包
yum -y install cmake libaio libaio-devel #所有平臺上的構建框架,mysql要求cmake檢查libaio和libaio-devel的存在
yum -y install make #一個良好的make程序,官方建議使用GNU make 3.75及更高版本
yum -y install gcc gcc-c++ #一個有效的ANSI C ++編譯器,如默認情況下cmake會檢查受支持的編譯器的最低版本:
#vs2013、gcc4.4或clang3.3、ds12.5。-DFORCE_UNSUPPORTED_COMPILER=ON時可以使cmake跳過此檢查。
#Boost C++ libraries用來創建mysql,必須安裝Boost 1.59.0。通過cmake . -DWITH_BOOST=/usr/local/boost_1_59_0通知其位置。
#這裏我們直接下載官方帶有boost的源碼包,故不需要安裝boost
yum -y install ncurses ncurses-devel bison bison-devel git # 其它安裝依賴包

#獲取並解壓分發包:這裏直接下載帶boost的版本,否則還需自己下載boost並放在對應位置源碼包的頂層目錄
VERSION=5.7.26
tar zxvf mysql-boost-KaTeX parse error: Expected 'EOF', got '#' at position 16: VERSION.tar.gz #̲配置分發: cd mysql-VERSION
mkdir bld
cd bld
cmake… -DWITH_BOOST=…/boost -DBUILD_CONFIG=mysql_release -DWITH_DEBUG=OFF
#cmake使用默認值,只需指定所在位置。-G可以指定開發環境,如windows上cmake … -G “Visual Studio 12 2013 Win64”
#還可以添加更多選項,如
#-DBUILD_CONFIG=mysql_release: Configure the source with the same build options used by Oracle to produce binary distributions for official MySQL releases.必須也安裝libaio
#-DCMAKE_INSTALL_PREFIX=dir_name: Configure the distribution for installation under a particular location.
#-DCPACK_MONOLITHIC_INSTALL=1: Cause make package to generate a single installation file rather than multiple files.
#-DWITH_DEBUG=1: Build the distribution with debugging support.
#For a more extensive list of options, see Section 2.9.4, “MySQL Source-Configuration Options”.
#要查看配置
#shell> cmake … -L # overview
#shell> cmake … -LH # overview with help text
#shell> cmake … -LAH # all params with help text
#shell> ccmake … # interactive display
#編譯錯誤要先刪除bld目錄下的該文件rm CMakeCache.txt;

#建立分發並安裝分發
make & make install
#make VERBOSE=1可以打印過程中每個編譯命令
#make install DESTDIR="/opt/mysql" 安裝在特定目錄,默認/usr/local/mysql
#make package生成一個或多個.tar.gz通用二進制包。若cmake -DCPACK_MONOLITHIC_INSTALL=1則操作產生單個文件,否則多個
#成功執行到此處,相當於把通用二進制版本放到了/user/local/mysql裏,裏面也有bin等目錄
2.2 一些必要步驟及初始化、啓動過程
#安裝一些依賴包
rpm -qa | grep mariadb | xargs rpm -e --nodeps #最好是刪除預裝的mariadb,否則可能因爲共享庫的原因導致mysql服務器啓動失敗
yum install libaio #必須,若不安裝,則數據目錄初始後和後續服務器啓動步驟將失敗
yum -y install numactl.x86_64 #5.7.19始,通用linux構建包含對非統一內存NUMA的支持,依賴於libnuma
#設定一些常用的參數
cat > /etc/my.cnf <<EOFcnf
[mysqld]
#實例唯一
server-id =3306
port =3306
socket =/tmp/mysql.sock
datadir =/usr/local/mysql/data/
general-log-file =/usr/local/mysql/log/general.log
slow-query-log-file =/usr/local/mysql/log/slow.log
log-bin =/usr/local/mysql/repl/binlog
relay-log =/usr/local/mysql/repl/relaylog
#通用屬性

plugin-load ="validate_password=validate_password.so"
basedir                         =/usr/local/mysql/
#read-only                      =1
user                            =mysql
lower_case_table_names=1
character-set-server            =utf8mb4
default-storage-engine          =INNODB
secure-file-priv='/usr/local/mysql/'
explicit_defaults_for_timestamp=ON
#sql_mode=default
event-scheduler                 =1
log-bin-trust-function-creators =1
group-concat-max-len            =102400
validate-password               =ON
validate_password_length=8
validate_password_policy=0

log-output                      =FILE
general-log
slow-query-log
long_query_time =1

gtid-mode                       =ON
enforce-gtid-consistency        =true

binlog-format                   =ROW
expire-logs-days                =70
max-binlog-size                 =1024M
log-slave-updates               =1

skip-slave-start
relay-log-recovery              =ON
slave-parallel-type             =LOGICAL_CLOCK
slave-parallel-workers          =20
replicate-ignore-db             =test

relay-log-info-repository       =TABLE
master-info-repository          =TABLE

EOFcnf

#創建mysql用戶組
groupadd mysql
useradd -r -g mysql -s /bin/false mysql

#清空數據目錄等,創建必要的目錄
myfdir=/usr/local
rm -rf $myfdir/mysql/data $myfdir/mysql/log $myfdir/mysql/repl $myfdir/mysql/ib
mkdir -p $myfdir/mysql/log
mkdir -p $myfdir/mysql/repl
mkdir -p $myfdir/mysql/ib

#賦予相關文件或目錄mysql屬主和適當的權限
chown -R mysql:mysql /etc/my.cnf
chmod -R 750 /etc/my.cnf
chown -R mysql:mysql $myfdir/mysql/
chmod -R 750 $myfdir/mysql/

#執行初始化
mypw=$myfdir/mysql/bin/mysqld --initialize --user=mysql --basedir=$myfdir/mysql --datadir=$myfdir/mysql/data 2>&1 |grep "A temporary password is generated for"
mypw=${mypw#*: }
echo $mypw #如果初始化成功,應該能看到一個複雜的密碼,這是mysql賬戶root@localhost的過期的初始密碼

#添加服務、創建一些軟連接以便能更好的調用mysql軟件
ln -sf $myfdir/mysql/support-files/mysql.server /etc/init.d/mysqld #使mysqld可以作爲服務啓動
chmod +x /etc/init.d/mysqld #使mysqld可以作爲服務啓動
ln -sf $myfdir/mysql/support-files/mysqld_multi.server /etc/init.d/mysqldm
chmod +x /etc/init.d/mysqldm
ln -sf $myfdir/mysql /mysql
ln -sf $myfdir/mysql/bin/* $myfdir/bin/
ln -sf $myfdir/mysql/lib/libmysqlclient.so* /usr/lib64/

#啓動mysqld服務器
service mysqld start #或者使用mysqld_safe --user=mysql &

2.3 使用mysql連接服務器並修改root賬號的初始密碼
mysql --password=$mypw --connect-expired-password -e “ALTER USER ‘root’@‘localhost’ IDENTIFIED BY ‘ztdmimadl1MY’;”

  • 3 linux上四種安裝方式的比較

yum和rpm的本質都是安裝幾個rpm包,區別在於使用yum安裝時需要訪問公網訪問官方下載地址下載安裝所需的文件,其安裝過程、mariadb庫的自動替換、安裝佈局、服務自啓等設定都是一樣的。此外,rpm包可以選擇使用yum命令或rpm -ivh命令安裝,使用rpm安裝需要自己解決潛在的依賴包問題,如libaio。
源代碼和通用二進制的區別主要在於:使用源代碼安裝可以設定編譯選項,並且編譯過程耗時較長。實際上,通用二進制包不過是官方根據各平臺優化配置後的編譯好的二進制文件,我們使用源代碼自定義編譯的目標就是生成與通用二進制包相似的二進制文件。故此,編譯好源碼後,通用二進制安裝和源代碼編譯好的二進制的安裝過程幾乎一致。
一般來說,我們可以使用官方提供的通用二進制包進行安裝,其優勢在於安裝位置比較集中,不像rpm安裝默認佈局一樣分散,更加便於管理,對系統文件系統的影響較小。
特殊情況可以考慮使用源碼安裝,源碼安裝有其優勢:
1)可自定義mysql組件的安裝位置
2)可加入標準二進制分佈沒有的功能,如最爲常用的
-DWITH_LIBWRAP=1 for TCP wrappers support.
-DWITH_ZLIB={system|bundled} for features that depend on compression
-DWITH_DEBUG=1 for debugging support
For additional information, see Section 2.9.4, “MySQL Source-Configuration Options”.
3)刪除某些功能,按需安裝,最小化安裝:如可以不使用某些字符集
4)修改某些源代碼來自定義軟件
5)源分發比二進制安裝包含更多測試、例子
4 附:centos6或7自動化安裝MySQL腳本
腳本文件:
使用方式:sh install_mysql_auto.sh {yum | rpm | bin}
注意事項:
1.使用腳本前,請將先前mysql的安裝、進程、服務啓動項、路徑等清理乾淨。最好在一個沒有安裝過mysql的電腦使用
2.使用yum安裝,需要外網,將使mysqld安裝到最新的5.7版本;
使用rpm安裝,需將較新5.7版本的mysql-community-common、mysql-community-libs、mysql-community-client、mysql-community-server、mysql-community-libs-compat包上傳至工作目錄;
使用bin安裝,需將grep mysql-5.7*-el*64.tar.gz能識別的包(如mysql-5.7.26-el7-x86_64.tar.gz)上傳至工作目錄
3.腳本將刪除/data/mysql/data /data/mysql/log /data/mysql/repl /data/mysql/ib原有內容,使用bin還會刪除/usr/local/mysql
4.腳本將修改/etc/security/limits.conf、/etc/sysctl.conf等系統文件,關閉防火牆、selinux,以及其他一些系統相關操作
5.腳本將重寫/etc/my.cnf。若有需要,可以先備份。此外,最好更名備份其他位置的配置文件,以免腳本初始化服務器等出錯。

腳本內容:

#!/bin/sh
#*************************
#Created By:    xxxx
#*************************
#

#判斷使用方式是否正確

case "$1" in
    'yum' | 'rpm' | 'bin' )
        ;;
    *)
        echo "error:Usage: $0 {yum|rpm|bin}" >&2
		exit 1
        ;;
esac

#提醒安裝腳本的注意事項和對系統的影響,4和5中的一些配置可以自己修改
cat << EOFreadme
1.使用腳本前,請將先前mysql的安裝、進程、服務啓動項、路徑等清理乾淨。最好在一個沒有安裝過mysql的電腦使用
2.使用yum安裝,需要外網,將使mysqld安裝到最新的5.7版本;
使用rpm安裝,需將較新5.7版本的mysql-community-common、mysql-community-libs、mysql-community-client、mysql-community-server、mysql-community-libs-compat包上傳至工作目錄;
使用bin安裝,需將grep mysql-5.7*-el*64.tar.gz能識別的包(如mysql-5.7.26-el7-x86_64.tar.gz)上傳至工作目錄
若繼續執行,則
3.腳本將刪除/data/mysql/data /data/mysql/log /data/mysql/repl /data/mysql/ib原有內容,使用bin還會刪除/usr/local/mysql
4.腳本將修改/etc/security/limits.conf、/etc/sysctl.conf等系統文件,關閉防火牆、selinux,以及其他一些系統相關操作
5.腳本將重寫/etc/my.cnf。若有需要,可以先備份。此外,最好更名備份其他位置的配置文件,以免腳本初始化服務器等出錯。

EOFreadme
read -n1 -p "Do you want to continue [Y/N]?" answer
case $answer in
	Y | y )
		echo -e "\nfine, continue";;
	*)
		echo -e "\nthe script will exit with 1"
		exit 1;;
esac

#yum方式安裝mysql
install_mysql_yum() {
echo “installing mysql throught yum”
wget https://repo.mysql.com//mysql80-community-release-el7-2.noarch.rpm
yum -y localinstall mysql80-community-release-el7-2.noarch.rpm

#由於該倉庫默認啓用的是mysql80庫,想要安裝mysql57還需將mysql80庫禁用並將mysql57啓用。這裏使用如下方式修改倉庫配置
yum-config-manager --disable mysql80-community
yum-config-manager --enable mysql57-community

#安裝MySQL,這會依次安裝:
#mysql-community-common  #cs共同的錯誤信息和字符集包
#mysql-community-libs  #共享客戶端庫,會替換mariadb-libs
#mysql-community-client #客戶端包
#mysql-community-server 
#mysql-community-libs-compat   #會替換mariadb-libs
yum -y install mysql-community-server
rpm -qa |grep mysql-community-server-5.7
if [  "$?" != 0 ];then echo "error:something wrong during the installation for mysql's rpm";exit 1; fi
mysqld=/usr/sbin/mysqld
echo "mysql5.7 installed successfully"

}

#rpm包方式安裝mysql
install_mysql_rpm() {
echo “installing mysql throught rpm”
#通過官網下載等方式獲取對應平臺以下幾個rpm包,並將其上傳至所要安裝的平臺上,執行以下命令,則會依次安裝好這幾個包
#mysql-community-common #cs共同的錯誤信息和字符集包
#mysql-community-libs #共享客戶端庫,會替換mariadb-libs
#mysql-community-client #客戶端包
#mysql-community-server
#mysql-community-libs-compat #會替換mariadb-libs
yum -y install mysql-community-{server,client,common,libs}-5.7el64 --exclude=‘minimal
rpm -qa |grep mysql-community-server-5.7
if [ “$?” != 0 ];then echo “error:something wrong during the installation for mysql’s rpm”;exit 1; fi
mysqld=/usr/sbin/mysqld
echo “mysql5.7 installed successfully”
}

#通用二進制方式安裝mysql

install_mysql_bin() {
    echo "installing mysql throught general binary"
	myfdir=/usr/local
	pkg=`ls | grep mysql-5.7*-el*64.tar.gz`
	if [ -z $pkg ];then echo "error:you havn't got a correct binary package(like:mysql-5.7.*-el7-x86_64.tar.gz) in the work directory";exit 1; fi
	rm -rf $myfdir/${pkg%.tar.gz} $myfdir/mysql
	tar zxvf $pkg --directory=$myfdir
	mv $myfdir/${pkg%.tar.gz}  $myfdir/mysql
	if [  "$?" != 0 ];then echo "error:something wrong during the decompression";exit 1; fi
	#rm -f pkg
	mysqld=$myfdir/mysql/bin/mysqld
	rpm -qa | grep mariadb | xargs rpm -e --nodeps
	yum -y install libaio
	yum -y install numactl.x86_64
	groupadd mysql
	useradd -r -g mysql -s /bin/false mysql

ln -sf $myfdir/mysql/support-files/mysql.server /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld
ln -sf $myfdir/mysql/bin/* $myfdir/bin/
ln -sf $myfdir/mysql/lib/libmysqlclient.so*  /usr/lib64/

chkconfig --add mysqld
chkconfig mysqld on
echo "mysql5.7 installed successfully"
}

#根據選擇,調用相應的安裝方式

case "$1" in
    'yum' )
		install_mysql_yum
        ;;
    'rpm' )
		install_mysql_rpm
        ;;
    'bin' )
		install_mysql_bin
        ;;
*)
    echo "error:Usage: $0 {yum|rpm|bin}" >&2
	exit 1
    ;;

esac

#修改用戶資源限制

cat > /etc/security/limits.conf <<EOFlimits
mysql - proc 10240
mysql - nofile 65535
mysql - memlock 402653184
mysql - nice -20
mysql - rtprio 100
root - proc 65535
root - nofile 65535
EOFlimits
ulimit -u 10240 
ulimit -n 262140

#修改內核參數設置

cat > /etc/sysctl.conf <<EOFsysctl
kernel.sysrq =0
net.core.wmem_default=8388608
net.core.rmem_default=8388608
net.core.rmem_max=16777216
net.core.wmem_max=16777216
net.ipv4.tcp_timestamps=1
net.ipv4.tcp_tw_recycle=1
net.ipv4.tcp_tw_reuse=1
net.ipv4.tcp_keepalive_time=300
net.ipv4.tcp_keepalive_probes=2
net.ipv4.tcp_keepalive_intvl=10
net.ipv4.ip_local_port_range=10000 65535    
vm.swappiness=1
fs.aio-max-nr=1048576
net.ipv6.conf.all.disable_ipv6=1
net.ipv6.conf.default.disable_ipv6=1
EOFsysctl
sysctl -p

#關閉selinux
setenforce 0
sed -i ‘s/SELINUX=enforcing/SELINUX=disabled/’ /etc/selinux/config

#調整ssh設置
sed -i ‘s/#UseDNS ./UseDNS no/g’ /etc/ssh/sshd_config
sed -i ‘s/#GSSAPIAuthentication ./GSSAPIAuthentication no/g’ /etc/ssh/sshd_config

#將磁盤io調度方式設置爲deadline

echo deadline>/sys/block/sda/queue/scheduler
echo deadline>/sys/block/sdb/queue/scheduler
echo deadline>/sys/block/sdc/queue/scheduler
echo deadline>/sys/block/sdd/queue/scheduler
if [ `cat /etc/redhat-release|sed -r 's/.* ([0-9]+)\..*/\1/'` = "7" ];then 
	grubby --update-kernel=ALL --args="elevator=deadline"
fi

#關閉防火牆,防止自啓

service iptables stop 2> /dev/null
service ip6tables stop 2> /dev/null
service firewalld stop 2> /dev/null
chkconfig iptables off 2> /dev/null
chkconfig ip6tables off 2> /dev/null
chkconfig firewalld off 2> /dev/null

#配置mysql的選項文件

cat > /etc/my.cnf <<EOFmy
[client]
user                            =root
host                            =127.0.0.1
port                            =3306
loose-default-character-set     =utf8mb4

[mysqld]
server-id                       =3306
port                            =3306
socket                          =/tmp/mysql.sock

datadir                         =/data/mysql/data/

general-log-file                =/data/mysql/log/general.log
slow-query-log-file             =/data/mysql/log/slow.log

log-bin                         =/data/mysql/repl/binlog
relay-log                       =/data/mysql/repl/relaylog

#innodb-undo-directory           =/data/mysql/log/
#innodb-log-group-home-dir       =/data/mysql/log/


plugin-load ="validate_password=validate_password.so"
plugin-load-add ="rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"

#basedir                         =/usr/local/mysql/
#read-only                      =1
user                            =mysql
lower_case_table_names=1
character-set-server            =utf8mb4
default-storage-engine          =INNODB
#secure-file-priv='/data/mysql/'
explicit_defaults_for_timestamp=ON
#sql_mode=default

event-scheduler                 =1
log-bin-trust-function-creators =1
group-concat-max-len            =102400
validate-password               =ON
validate_password_length=8
validate_password_policy=0


log-output                      =FILE
general-log
slow-query-log
long_query_time =1

gtid-mode                       =ON
enforce-gtid-consistency        =true

binlog-format                   =ROW
expire-logs-days                =70
max-binlog-size                 =1024M
log-slave-updates               =1

skip-slave-start
relay-log-recovery              =ON
slave-parallel-type             =LOGICAL_CLOCK
slave-parallel-workers          =20
replicate-ignore-db             =test

relay-log-info-repository       =TABLE
master-info-repository          =TABLE


rpl_semi_sync_master_enabled=1
rpl_semi_sync_slave_enabled =1
rpl_semi_sync_master_timeout=10000   #毫秒
rpl_semi_sync_master_wait_no_slave=1  #默認
rpl_semi_sync_master_wait_for_slave_count=1
rpl_semi_sync_master_wait_point=AFTER_SYNC  #,AFTER_COMMIT


#innodb-data-file-path           =ibdata1:128M;ibdata2:64M:autoextend:max:2048M
#innodb-temp-data-file_path      =ibtmp1:128M;ibtmp2:64M:autoextend:max:2048M
#innodb-autoextend-increment     =64

#auto_increment_offset           =1
#auto_increment_increment        =2

#skip-name-resolve=1
innodb-file-per-table           =1
innodb-flush-log-at-trx-commit  =1
sync-binlog                     =1
max-connections                 =200
max-allowed-packet              =300M


innodb_buffer_pool_size          =128M
#innodb_buffer_pool_instances=1  #默認   當維持每個實例的大小大於1g才生效
innodb_log_buffer_size           =16M
key_buffer_size                  =8M
#table_definition_cache           =1400
table_open_cache                 =2000
thread_cache_size                =16
#host_cache_size                  =128

#query_cache_type=2
#query_cache_size=1M
#binlog_cache_size=32K   # binlog_cache_use和binlog_cache_disk_use
#binlog_stmt_cache_size=16K  # binglog_stmt_cache_use和binlog_stmt_cache_disk_use
#stored_program_cache=256
#max_prepared_stmt_count=16382

#read_buffer_size=128K   #截斷爲4K的倍數:myisam順序掃描;ORDER BY時caching the indexes in a temporary file;bulk insert into partitions;caching results of nested queries;determine the memory block size for MEMORY tables;
#read_rnd_buffer_size=256K    # reading rows from a MyISAM table in sorted order following a key-sorting operation;Multi-Range Read optimization;
#bulk_insert_buffer_size=8M   #多行插入如insert ...select,insert...values(),(),load data等,設置爲0將禁用優化
#join_buffer_size=256K     # When BKA is used, the value of join_buffer_size defines how large the batch of keys is in each request to the storage engine. The minimum size of the buffer that is used for plain index scans, range index scans, and joins that do not use indexes and thus perform full table scans.
#sort_buffer_size=256K   # Sort_merge_passes比較多時,增加該值。
#innodb_sort_buffer_size=1M  #靜態全局,索引創建中分配3個
#myisam_sort_buffer_size=8M     # when sorting MyISAM indexes during a REPAIR TABLE or when creating indexes with CREATE INDEX or ALTER TABLE.
#tmp_table_size=16M        #group by很重要;Created_tmp_disk_tables和Created_tmp_tables
#max_heap_table_size=16M

#preload_buffer_size=32K   # The size of the buffer that is allocated when preloading indexes.
#max_digest_length=1024    #默認,每個會話


innodb_old_blocks_pct=37   #默認
innodb_old_blocks_time=1000   #默認
innodb_change_buffering=all  #默認
innodb_change_buffer_max_size=25  #默認。
innodb_adaptive_hash_index=1   #默認,當隨機調整


innodb_thread_concurrency=0   #嘗試將innodb併發線程數控制在給定範圍內
innodb_commit_concurrency=0   #同時提交的線程數;動態不能再0和非0間改;
innodb_concurrency_tickets=5000
innodb_thread_sleep_delay=10000   #定義InnoDB線程在加入InnoDB隊列之前休眠的時間(以微秒爲單位)
innodb_adaptive_max_sleep_delay=150000


innodb_read_io_threads=4
innodb_write_io_threads=4
innodb_purge_threads=4
innodb_purge_batch_size=300  #每個線程每次清理的undo頁

innodb_io_capacity=2000      #所有緩衝池實例的每秒i/o操作數的上限,默認200。 機械硬盤可能只能有200
innodb_io_capacity_max=4000    #當flush落後,可以增加capacity到該數值。默認兩倍cp。

innodb_read_ahead_threshold=56    #默認      #狀態Innodb_buffer_pool_read_ahead_evicted,Innodb_buffer_pool_read_ahead
innodb_random_read_ahead=1  #默認  #狀態 Innodb_buffer_pool_read_ahead_rnd

innodb_flush_sync=1   #默認
innodb_adaptive_flushing_lwm=10
innodb_adaptive_flushing=1
innodb_max_dirty_pages_pct_lwm=0  #默認禁用預刷新
innodb_max_dirty_pages_pct=75

innodb_spin_wait_delay=6            #默認

innodb_buffer_pool_dump_at_shutdown=ON
innodb_buffer_pool_dump_pct=25  #默認25,可以設置高一點。在關閉時爲每個緩衝池保存最近使用的頁面的百分比,減少預熱時間
innodb-buffer-pool-load-at-startup=ON
innodb_stats_persistent=1

EOFmy

#爲初始化創建相應的目錄,防止初始化或啓動mysql失敗
rm -rf /data/mysql/data /data/mysql/log /data/mysql/repl /data/mysql/ib #實際上只要保證數據目錄爲空或不存在,其他目錄存在即可
mkdir -p /data/mysql/data
mkdir -p /data/mysql/log
mkdir -p /data/mysql/repl
mkdir -p /data/mysql/ib

#爲相應目錄、文件設定mysql用戶和正確的讀寫權限
chown -R mysql:mysql /etc/my.cnf
chmod -R 750 /etc/my.cnf
chown -R mysql:mysql /data/mysql/
chmod -R 750 /data/mysql/

#開始初始化數據目錄
mypw=$mysqld --initialize --user=mysql 2>&1 |grep "A temporary password is generated for" #這裏沒有給出–datadir,故配置文件中必須給出
mypw=${mypw#*: }
if [ -z $mypw ]; then “error:something wrong when initialize mysql”;exit 1;fi
echo $mypw

#啓動mysql
service mysqld start
if [ “$?” != 0 ];then echo “error:something wrong during starting mysqld”;exit 1; fi
sleep 1
service mysqld status

#修改root密碼,創建一些常用賬戶並賦予權限
addsalt=ztd123 #注意設定加鹽長度等使其符合密碼驗證插件的要求

mysql --protocol=tcp -P3306 -uroot --password=$mypw --connect-expired-password -e "
ALTER USER 'root'@'localhost' IDENTIFIED BY 'root$addsalt';
update mysql.user set mysql.user.Host='%' where mysql.user.User='root';

CREATE USER 'application'@'%' IDENTIFIED BY 'application$addsalt';
GRANT DELETE,UPDATE,INSERT,SELECT,EXECUTE ON *.* TO 'application'@'%';

CREATE USER 'readonly'@'%' IDENTIFIED BY 'readonly$addsalt';
GRANT SELECT ON *.* TO 'readonly'@'%';

CREATE USER 'replication'@'%' IDENTIFIED BY 'replication$addsalt';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'replication'@'%';

CREATE USER 'monitor'@'%' IDENTIFIED BY 'monitor$addsalt';
GRANT SUPER,PROCESS,SELECT ON *.* TO 'monitor'@'%';

CREATE USER 'backup'@'%' IDENTIFIED BY 'backup$addsalt';
GRANT SELECT,RELOAD,PROCESS,REPLICATION CLIENT ON *.* TO 'monitor'@'%';

CREATE USER 'shutdown'@'localhost' IDENTIFIED BY 'shutdown$addsalt'; 
GRANT SHUTDOWN ON *.* TO 'shutdown'@'localhost';
flush privileges;
"

#驗證root密碼是否修改成功,若能成功進入mysql交互界面,則已成功安裝並配置好mysql。
mysql --protocol=tcp -P3306 -uroot -proot$addsalt

好了!以上就是關於如何安裝的詳細步驟,完結撒花~
如果看的還不過癮可以瀏覽之前的文章——MySQL數據類型測試系列文章和分佈式事務數據庫MySQL數據庫開發規範
see you~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章