在CentOS7中編譯安裝MySQL 5.7.29
一。依賴包安裝
yum install gcc gcc-c++ ncurses ncurses-devel cmake bison -y
二。下載源碼包(MySQL5.7.29源碼包和依賴boost)
curl -o boost_1_59_0.tar.gz https://jaist.dl.sourceforge.net/project/boost/boost/1.59.0/boost_1_59_0.tar.gz curl -o mysql-5.7.29.tar.gz http://mirrors.163.com/mysql/Downloads/MySQL-5.7/mysql-5.7.29.tar.gz
三。解壓
# 進入下載路徑 #boost解壓到/usr/local/目錄 tar -zxvf boost_1_59_0.tar.gz -C /usr/local/ #MySQL解壓到當前目錄 tar -zxvf mysql-5.7.29.tar.gz
四。創建用戶和組
創建MySQL用戶和組,並且用戶不能登錄
groupadd -r mysql && useradd -r -g mysql -s /sbin/nologin -M mysql
五。創建相關目錄
- 創建數據目錄
mkdir -p /data/mysql && chown mysql.mysql /data/mysql
- 創建log目錄
mkdir -p /var/log/mysql && chown mysql.mysql /var/log/mysql
- 創建Unix SOCK目錄
mkdir -p /var/lib/mysql && chown mysql.mysql /var/lib/mysql
- 創建PID目錄
mkdir -p /var/run/mysqld && chown mysql.mysql /var/run/mysqld
六。預編譯
使用各種參數,預編譯源代碼。進入解壓的MySQL源碼目錄,執行命令:
cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/data/mysql -DSYSCONFDIR=/etc -DMYSQL_UNIX_ADDR=/var/lib/mysql/mysqld.sock -DEXTRA_CHARSETS=all -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_PARTITION_STORAGE_ENGINE=1 -DENABLED_LOCAL_INFILE=1 -DENABLED_PROFILING=1 -DMYSQL_TCP_PORT=3306 -DWITH_DEBUG=0 -DDOWNLOAD_BOOST=1 -DWITH_BOOST=/usr/local/boost_1_59_0
格式化:
cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/data/mysql -DSYSCONFDIR=/etc -DMYSQL_UNIX_ADDR=/var/lib/mysql/mysqld.sock -DEXTRA_CHARSETS=all -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_PARTITION_STORAGE_ENGINE=1 -DENABLED_LOCAL_INFILE=1 -DENABLED_PROFILING=1 -DMYSQL_TCP_PORT=3306 -DWITH_DEBUG=0 -DDOWNLOAD_BOOST=1 -DWITH_BOOST=/usr/local/boost_1_59_0
說明:
DCMAKE_INSTALL_PREFIX=/usr/local/mysql :安裝路徑 DMYSQL_DATADIR=/data/mysql :數據文件存放位置 DSYSCONFDIR=/etc :my.cnf路徑 DMYSQL_UNIX_ADDR=/var/lib/mysql/mysqld.sock :連接數據庫socket路徑 DEXTRA_CHARSETS=all :安裝所有的字符集 DDEFAULT_CHARSET=utf8 :默認字符 DDEFAULT_COLLATION=utf8_general_ci :排序集 DWITH_MYISAM_STORAGE_ENGINE=1 :支持MyIASM引擎 DWITH_INNOBASE_STORAGE_ENGINE=1 :支持InnoDB引擎 DWITH_PARTITION_STORAGE_ENGINE=1 :安裝支持數據庫分區 DENABLED_LOCAL_INFILE=1 :允許從本地導入數據 DENABLED_PROFILING=1 : DMYSQL_TCP_PORT=3306 :端口 DWITH_DEBUG=0 : DDOWNLOAD_BOOST=1 :允許下載 DWITH_BOOST=/usr/local/boost_1_59_0 :本地boost路徑
七。編譯安裝
# 指定CPU數量編譯
make -j `grep processor /proc/cpuinfo | wc -l` && make install
八。添加開機自啟動
對目錄修改權限,添加service/systemd服務
chown -R mysql:mysql /usr/local/mysql cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld chmod +x /etc/init.d/mysqld
# 開機自啟 chkconfig --add mysqld chkconfig mysqld on
九。環境變量
將/usr/local/mysql/bin添加進入環境變量, 或者直接使用軟鏈接的方式鏈到/usr/local/bin下:
# 添加到環境變量 echo "" >> /etc/bashrc echo "export PATH=/usr/local/mysql/bin:$PATH" >> /etc/bashrc echo "" >> /etc/bashrc source ~/.bashrc 或添加到/etc/profilePATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH
source /etc/profile
# 使用軟鏈接 ln -s /usr/local/mysql/bin/* /usr/local/bin/
十。初始化數據庫
以上完成之后, 需要先進行初始化數據庫, 否則直接啟動會報錯
/usr/local/mysql/bin/mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
--user :指定用戶
--basedir :MySQL所在目錄
--datadir :MySQL數據庫和表所在的目錄,以及pid文件
十一。啟動服務
# 使用service service mysqld start # 使用systemd systemctl daemon-reload systemctl start mysqld
十二。修改配置文件(/etc/my.cnf)
參考:
[root@iZ2864f6btwZ mysql-5.7.19]# vim /etc/my.cnf [mysqld] datadir=/usr/local/mysql/data socket=/usr/local/mysql/mysql.sock [mysqld_safe] log-error=/usr/local/mysql/logs/mysqld.log pid-file=/usr/local/mysql/pids/mysqld.pid # Disabling symbolic-links is recommended to prevent assorted security risks symbolic-links=0 # Settings user and group are ignored when systemd is used. # If you need to run mysqld under a different user or group, # customize your systemd unit file for mariadb according to the # instructions in http://fedoraproject.org/wiki/Systemd [client] default-character-set=utf8 socket=/usr/local/mysql/mysql.sock [mysql] default-character-set=utf8 socket=/usr/local/mysql/mysql.sock # # include all files from the config directory # !includedir /etc/my.cnf.d
十三。啟動服務
service mysqld start
# 查看mysql運行狀態
service mysqld status
十四。修改root用戶密碼
MySQL 5.7版本下的mysql數據庫下已經沒有password這個字段了,password字段改成了authentication_string,查詢時使用authentication_string字段即可
1)設置密碼(推薦)
進入mysql庫 update user set authentication_string=PASSWORD('newpassword') where user='root'; flush privileges;
2)快速設置密碼
mysqladmin -u root password 'newpassword'
常見問題:
1. 預編譯的術后出現錯誤

解決方案:
臨時添加交換空間(虛擬內存)
[root@iZ2864f6btwZ mysql-5.7.19]# dd if=/dev/zero of=/swapfile bs=1k count=2048000 2048000+0 records in 2048000+0 records out 2097152000 bytes (2.1 GB) copied, 34.6782 s, 60.5 MB/s [root@iZ2864f6btwZ mysql-5.7.19]# mkswap /swapfile Setting up swapspace version 1, size = 2047996 KiB no label, UUID=56026239-26e6-40d9-b080-b95acd9db058 [root@iZ2864f6btwZ mysql-5.7.19]# swapon /swapfile swapon: /swapfile: insecure permissions 0644, 0600 suggested. [root@iZ2864f6btwZ mysql-5.7.19]# chmod 600 /swapfile
繼續執行make操作:
make clean
make
如果編譯完成之后不再使用交換空間,可執行命令:
[root@iZ2864f6btwZ mysql-5.7.19]# swapoff /swapfile [root@iZ2864f6btwZ mysql-5.7.19]# rm /swapfile
溫馨提示: MySQL編譯過程等待時間會比較久,有時都以為是“卡”住了,你可以使用top命令查看資源狀態,看看cc1plus、make等進程是否在跳動,如果有跳動說明安裝還在繼續,由於我的 ecs 配置較低,此過程大約經歷了幾個小時,特別是在29%和74%的時候,幾乎都要快放棄了, 如果有經濟的能力的話,建議服務器配置還是盡量買高一點。 [root@iZ2864f6btwZ mysql-5.7.19]# top
2. 客戶端連接MySQL
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
問題:/etc/my.cnf文件配置不正確
解決方案:
修改為正確的路徑即可,可全局搜索my.sock
參考: https://www.jianshu.com/p/4416792750c7
