網(wǎng)上已經(jīng)有那么多的關(guān)于CentOS 7如何安裝MySQL的文章了淤翔, 為什么還要寫這沒一篇關(guān)于CentOS 7安裝MySQL的文章呢?
主要有以下幾個(gè)原因:
網(wǎng)上很多都是在線安裝胆屿,很多時(shí)候,在生產(chǎn)環(huán)境進(jìn)行部署時(shí)偶宫,生產(chǎn)機(jī)器都是不可能直接連公網(wǎng)的非迹,導(dǎo)致網(wǎng)上很多的文章沒有借鑒意義
網(wǎng)上很多文章都比較舊,安裝的MySQL版本也比較舊纯趋,沒有進(jìn)行更新憎兽,導(dǎo)致很多步驟在新的MySQL版本安裝上不適用
網(wǎng)上很多文章本身就是錯(cuò)的,很容易誤導(dǎo)讀者吵冒;
為了總結(jié)一篇實(shí)用的纯命,不誤導(dǎo)大家的文章,也讓搜索到我這篇文章的讀者們不用再浪費(fèi)時(shí)間去搜索別的安裝教程痹栖,節(jié)省大家的時(shí)間亿汞,所以抽點(diǎn)時(shí)間把如何在CentOS 7下離線安裝MySQL的步驟進(jìn)行詳細(xì)的總結(jié),為大家圖個(gè)方便揪阿,也為自己做個(gè)筆記和總結(jié)疗我。
對(duì)于MySQL的數(shù)據(jù)庫的安裝咆畏,我們有很多種選擇來完成,而最為常用的為二進(jìn)制安裝以及源碼安裝吴裤,二進(jìn)制安裝方式中旧找,包括rpm版本以及glibc版本。
rpm版本就是在特定linux版本下編譯的嚼摩,如果你的linux版本匹配,就可以安裝矿瘦,如針對(duì)RedHat6或者RedHat7編譯好的rpm包枕面,下載對(duì)應(yīng)的安裝即可。另外一種二進(jìn)制安裝包為基于特定的glibc版本編譯的缚去,本文主要描述基于glibc方式安裝MySQL潮秘。
一、實(shí)驗(yàn)環(huán)境
操作系統(tǒng):? CentOS 7.5 Minimal
MySQL:? ? 192.168.1.106
二易结、安裝包下載
官方站點(diǎn):https://downloads.mysql.com/archives/community
三枕荞、卸載相關(guān)沖突包
# rpm? -qa | grep mysql | xargs rpm -e --nodeps? ? ?> /dev/null? 2>&1
# rpm? -qa | grep mariadb | xargs rpm -e --nodeps? > /dev/null? 2>&1
四、檢查依賴
# rpm -qa | grep??libaio
# rpm -qa | grep glibc
# yum? -y install libaio glibc?
注:要求Linux系統(tǒng)的glibc版本要比2.12新搞动,可以使用ldd --version查看glibc版本躏精。
#? ldd --version
五、檢查虛擬機(jī)內(nèi)存
檢查系統(tǒng)的虛擬內(nèi)存大小鹦肿,如果內(nèi)存不足 1G矗烛,啟動(dòng) mysql 的時(shí)候可能會(huì)產(chǎn)生下面這個(gè)錯(cuò)誤提示:
Starting mysqld (via systemctl): Job for mysqld.service failed because the control process exited with error code.
See "systemctl status mysqld.service" and "journalctl -xe" for details.[FAILED]
網(wǎng)上各種找解決方案,大部分都是什么文件權(quán)限箩溃、mysql 日志太大瞭吃,重裝等問題,然而沒用涣旨!
內(nèi)存設(shè)置過小歪架,耗費(fèi)大量的精力和時(shí)間去調(diào)試始終也啟動(dòng)沒成功。
六霹陡、selinux和防火墻設(shè)置
# setenforce 0
# sed? -i? 's/^SELINUX=.*/SELINUX=permissive/g'? /etc/selinux/config
# firewall-cmd --zone=public --add-port=3306/tcp --permanent
#?firewall-cmd --reload
七和蚪、創(chuàng)建MySQL用戶和用戶組
# groupadd? -r? mysql
#? useradd? -r -g? mysql? -s? /sbin/nologin? ? -M? mysql
八、安裝MySQL
# tar -xf?mysql-5.7.24-linux-glibc2.12-x86_64.tar?
# tar? -zxf?mysql-5.7.24-linux-glibc2.12-x86_64.tar.gz? -C /usr/local
# cd? /usr/local
# mv? mysql-5.7.24-linux-glibc2.12-x86_64/? ? mysql
初始化數(shù)據(jù)庫
方式一烹棉、以“安全模式”初始化
# mdkir -p /opt/data/mysql
# chown -R mysql:mysql /opt/data/mysql
# mysqld? - -initialize? ?--datadir=/opt/data/mysql? ?--user=mysql
數(shù)據(jù)庫初始化時(shí)惠呼,無需配置文件 my.cnf,啟動(dòng)mysql時(shí)才需my.cnf
如果數(shù)據(jù)初始化時(shí)峦耘,有my.cnf剔蹋,默認(rèn)讀取my.cnf,但是相關(guān)文件中相關(guān)目錄辅髓,文件權(quán)限需要提前創(chuàng)建和配置泣崩,此時(shí)初始化臨時(shí)密碼不會(huì)打印在控制少梁,而是在指定的日志文件中!
方式二矫付、以?“非安全模式”初始化
#?mysqld? ?--initialize? ?--basedir=/usr/local/mysql? ? --datadir=/opt/data/mysql? ?--user=mysql?
用這種方式此時(shí)凯沪,my.cnf應(yīng)該在初始化之后,啟動(dòng)數(shù)據(jù)庫之前生成买优,也就是說初始化時(shí)妨马,不用從/etc/my.cnf中讀取任何東西!
1. 初始化為數(shù)據(jù)庫
2. 生成 my.cnf
3. 啟動(dòng)MySQL
# touch? /var/log/mysqld.log
# chown mysql:mysql? /var/log/mysqld.log
默認(rèn)mysql初始化時(shí)杀赢,無需在mysqld.log烘跺,初始化密碼會(huì)打印在控制臺(tái)。
啟動(dòng)mysql時(shí),會(huì)自動(dòng)生成脂崔,默認(rèn)路徑是/var/log/mysqld/log滤淳,但如果初始化時(shí)在my.cnf中執(zhí)行此文件,那么需要提前創(chuàng)建和更改相關(guān)權(quán)限砌左!
# cat? /etc/my.cnf
###########################################
[client]
port=3306
socket=/var/lib/mysql/mysql.sock
[mysqld]
user=mysql
basedir=/usr/local/mysql?
datadir=/opt/data/mysql
socket=/var/lib/mysql/mysql.sock
symbolic-links=0
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
innodb_buffer_pool_size = 2G
innodb_log_file_size = 512M
innodb_flush_log_at_trx_commit = 1
innodb_flush_method = O_DIRECT
innodb_file_per_table=1
query_cache_type = 0
skip_name_resolve
log-bin=master-bin
binlog_format= ROW
max_connections = 1000
server_id=100
port=3306
sync_binlog=0
log_bin_trust_function_creators = 1
log_queries_not_using_indexes
slow_query_log=0
long_query_time=1
validate_password_check_user_name=on
plugin-load-add=validate_password.so
plugin-load-add=semisync_master.so
plugin-load-add=semisync_slave.so
loose_rpl_semi_sync_master_enabled = 1
loose_rpl_semi_sync_slave_enabled = 1
loose_rpl_semi_sync_master_timeout = 1000
validate-password=FORCE_PLUS_PERMANENT
validate_password_length=8
validate_password_policy=0
lower_case_table_names=1
gtid_mode= on
enforce_gtid_consistency
slave-parallel-type=LOGICAL_CLOCK
slave-parallel-workers=16
max_allowed_packet=256M
innodb_monitor_enable=all
character_set_server=utf8
local_infile=0
skip-symbolic-links=1
master_info_repository=table
relay-log-info-repository=table
relay_log_recovery=ON
sql-mode="ONLY_FULL_GROUP_BY,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,STRICT_ALL_TABLES"
wait_timeout=300
interactive_timeout=300
expire_logs_days=7
##################################################
# cd mysql?
#?cp?./support-files/mysql.server?/etc/rc.d/init.d/mysqld
# sed -i? 's#^basedir=#basedir=/usr/local/mysql#g'?? /etc/init.d/mysqld
# sed -i? 's#^datadir=#datadir=/opt/data/mysql#g'? ? ?/etc/init.d/mysqld?
此處basedir="" 和 datadir=""如果不設(shè)置脖咐,那么從my.cnf中讀取,如果my.cnf中設(shè)置了汇歹,此處無需再設(shè)置屁擅!
#chmod?+x?/etc/rc.d/init.d/mysqld
#?chkconfig?--add?mysqld
#?chkconfig? mysqld? on?
# systemctl start? mysqld
# systemctl enable? mysqld
# sytemctl status? mysqld
# mkdir /var/lib/mysql
#??chown? -R mysql:mysql? ?/var/lib/mysql
如果不在my.cnf中指定,那么啟動(dòng)mysql的socket文件mysql.sock默認(rèn)生成在在/tmp目錄下
我們?cè)趍y.cnf中指定 socket=/var/lib/mysql/mysql.sock,那么需要提前創(chuàng)建相關(guān)目錄产弹,更改相關(guān)權(quán)限煤蹭。
# mkdir /var/run/mysqld
#?chown -R mysql:mysql /var/run/mysqld
如果my.cnf不指定pid文件路徑,那么為 ${datadir}/主機(jī)名.pid
如果在my.cnf中指定了取视,那么需要提前創(chuàng)建相關(guān)路徑硝皂,更改相關(guān)權(quán)限。
# ln -s /var/lib/mysql/mysql.sock? /tmp/
# mysql? ?-u root? -p"lJe;w85Oqg6d"
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '設(shè)置的新密碼';
# mysql -u root -p"MySQL@123"
九作谭、參考
CentOS 7離線安裝MySQL 5.7
https://www.jellythink.com/archives/14
Linux 系統(tǒng)安裝下安裝 MySQL5.7(glibc版)
https://www.cnblogs.com/zero-gg/p/8875598.html
MySQL5.7安裝與配置
http://www.reibang.com/p/c504c655885d?tdsourcetag=s_pcqq_aiomsg
The world's most popular open source database?
A Quick Guide to Using the MySQL Yum Repository
https://dev.mysql.com/doc/mysql-yum-repo-quick-guide/en/
Installing MySQL on Linux Using the MySQL Yum Repository
https://dev.mysql.com/doc/refman/5.7/en/linux-installation-yum-repo.html
CentOS Linux 7離線安裝MySQL 5.7.x