1. 程式人生 > >Linux CentOS7安裝MySql8.0.11全攻略

Linux CentOS7安裝MySql8.0.11全攻略

一.軟體準備

Linux系統下載地址:http://isoredirect.centos.org/centos/7/isos/x86_64/CentOS-7-x86_64-DVD-1708.iso

cmake與依賴包 下載地址:https://download.csdn.net/download/qq_38118019/10394513

mysql8.0.11下載地址: https://download.csdn.net/download/qq_38118019/10394497

1.安裝 gcc、gcc++

1.1 解壓centOS7安裝映象檔案(.iso),在Packages資料夾中找到下列rpm安裝包上傳至Linux伺服器中
autogen-libopts-5.18-5.el7.x86_64.rpm
cpp-4.8.5-16.el7.x86_64.rpm
gcc-4.8.5-16.el7.x86_64.rpm
gcc-c++-4.8.5-16.el7.x86_64.rpm
glibc-devel-2.17-196.el7.x86_64.rpm
glibc-headers-2.17-196.el7.x86_64.rpm
kernel-headers-3.10.0-693.el7.x86_64.rpm
keyutils-libs-devel-1.5.8-3.el7.x86_64.rpm
krb5-devel-1.15.1-8.el7.x86_64.rpm
libcom_err-devel-1.42.9-10.el7.x86_64.rpm
libmpc-1.0.1-3.el7.x86_64.rpm
libselinux-devel-2.5-11.el7.x86_64.rpm
libsepol-devel-2.5-6.el7.x86_64.rpm
libstdc++-devel-4.8.5-16.el7.x86_64.rpm
libverto-devel-0.2.5-4.el7.x86_64.rpm
mpfr-3.1.1-4.el7.x86_64.rpm
ncurses-devel-5.9-13.20130511.el7.x86_64
ntp-4.2.6p5-25.el7.centos.2.x86_64.rpm
ntpdate-4.2.6p5-25.el7.centos.2.x86_64.rpm
openssl098e-0.9.8e-29.el7.centos.3.x86_64.rpm
openssl-1.0.2k-8.el7.x86_64.rpm
openssl-devel-1.0.2k-8.el7.x86_64.rpm
openssl-libs-1.0.2k-8.el7.x86_64.rpm
pkgconfig-0.27.1-4.el7.x86_64.rpm
tcl-8.5.13-8.el7.x86_64.rpm
zlib-1.2.7-17.el7.x86_64.rpm
zlib-devel-1.2.7-17.el7.x86_64.rpm

1.2 進入CentOS下,存放上述.rpm檔案的目錄,執行
rpm -Uvh *.rpm --nodeps --force

2.安裝cmake
tar -xzvf cmake-3.11.1.tar.gz
cd cmake-3.11.1
./bootstrap
make && make install


3.安裝mysql8
3.1 建立使用者密碼、安裝目錄和資料目錄
groupadd mysql
useradd -r -g mysql -s /bin/false mysql
passwd mysql
設定新密碼為:1q2w#E$R
mkdir -p /usr/local/mysql
mkdir -p /data/mysql
mkdir -p /home/mysql/run/mariadb
mkdir -p /home/mysql/log/mariadb
touch /home/mysql/run/mariadb/mariadb.log
touch /home/mysql/run/mariadb/mariadb.pid

3.2 安裝mysql8
tar -zxf mysql-boost-8.0.11.tar.gz -C /usr/local
cd /usr/local/mysql-8.0.11
cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/usr/local/mysql/data -DSYSCONFDIR=/etc -DMYSQL_TCP_PORT=3306 -DWITH_BOOST=/usr/local/mysql-8.0.11/boost 
make  && make install
cd /usr/local/mysql/bin

3.3 配置my.cnf檔案
vi /etc/my.cnf

[mysqld]
skip-grant-tables#這個是用來定義跳過密碼,必要時新增,一般不要加
server-id=1
port=3306
basedir=/usr/local/mysql
datadir=/data/mysql
socket=/data/mysql/mysql.sock
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


[mysqld_safe]
log-error=/home/mysql/log/mariadb/mariadb.log
pid-file=/home/mysql/run/mariadb/mariadb.pid


    ##請根據實際情況新增引數


  3.4 目錄許可權修改
chown -R root:root /usr/local/mysql
chown -R root:root /data/mysql
chown -R root:root /home/mysql/run/mariadb
chown -R root:root /home/mysql/log/mariadb
chmod 777 /usr/local/mysql -R
chmod 777 /data/mysql -R
chmod 755 /home/mysql/run/mariadb -R
chmod 755 /home/mysql/log/mariadb -R


  3.5 初始化

./mysqld --initialize --user=mysql --datadir=/data/mysql/

                (此時會自動生成一個密碼比如“A temporary password is generated for [email protected]: irwyCU0<jY%”,這裡的irwyCU0<jY%就是mysql賬戶的初始密碼)

./mysql_ssl_rsa_setup

3.6 新增到啟動
cp -v /usr/local/mysql/support-files/mysql.server /etc/init.d/
chkconfig --add mysql.server

  3.7 啟動mysql
./mysqld --defaults-file=/etc/my.cnf --user=root &
(關閉方法為 service mysql.server stop
service mysql.server {start|stop|restart|reload|force-reload|status})

        3.7.2新增軟連線         

        ln -s /data/mysql/mysql.sock /tmp/mysql.sock


  3.8 修改賬號密碼
/usr/local/mysql/bin/mysql  -uroot -p
//密碼是上面3.5生成的密碼,如果密碼還是怎麼輸都不對的話,可以修改my.cnf檔案,新增skip-grant-tables引數 然後執行service mysql.server stop 關閉mysql,然後再執行./mysqld --defaults-file=/etc/my.cnf --user=root & 啟動資料庫,然後再執行/usr/local/mysql/bin/mysql  -uroot -p登入資料庫,這時就不需要密碼了

mysql> alter user 'root'@'localhost' identified by "123456";
//如果啟用了skip-grant-tables,則無法修改密碼,此時需要修改my.cnf檔案,去掉skip-grant-tables,並在另一個視窗執行service mysql.server reload,這樣就可以繞過輸入密碼進入mysql,從而實現修改密碼。後期忘記密碼也可這麼做。


        mysql> show databases;
        +--------------------+
        | Database          |
        +--------------------+
        | information_schema |
        | mysql              |
        | performance_schema |
        | sys                |
        +--------------------+
4 rows in set (0.00 sec)


  3.9 新增遠端特賬號
    mysql> create user
[email protected]
'%' identified by '123456';
    Query OK, 0 rows affected (0.08 sec)


    mysql> grant all privileges on *.* to [email protected]'%';
    Query OK, 0 rows affected (0.04 sec)


    mysql> flush privileges;
    Query OK, 0 rows affected (0.01 sec)

mysql>ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';

mysql> exit


  3.10 建立軟連結(非必要)
ln -s /usr/local/mysql/bin/* /usr/local/bin/
mysql -h 127.0.0.1 -P 3306 -uroot -p123456 -e "select version();"
    mysql: [Warning] Using a password on the command line interface can be insecure.
    +-----------+
    | version() |
    +-----------+
    | 8.0.11    |
    +-----------+

3.11 開放Linux埠
cd /sbin
iptables -I INPUT -p tcp --dport 3306 -j ACCEPT
(
/etc/rc.d/init.d/iptables save #儲存配置 
/etc/rc.d/init.d/iptables restart #重啟服務 
儲存埠開放可以使得下次伺服器重啟時自動開放此埠,但是centos7會報檔案找不到,由於我是本地虛擬機器測試用,所以不做深入研究,每次啟動執行下埠開放即可
)



安裝完後,如果用客戶端連線,比如navicat會報1251錯誤,這是因為mysql8預設採用了新的加密規則,navicat暫時不支援,我們需要吧mysql8的加密規則改為舊的

4.1 配置my.cnf檔案 
加入default_authentication_plugin=mysql_native_password
vi /etc/my.cnf

[mysqld]
#skip-grant-tables
server-id=1
port=3306
basedir=/usr/local/mysql
datadir=/data/mysql/
socket=/data/mysql/mysql.sock

default_authentication_plugin=mysql_native_passwor

                default-time-zone='+8:00'

# 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


[mysqld_safe]
log-error=/home/mysql/log/mariadb/mariadb.log
pid-file=/home/mysql/run/mariadb/mariadb.pid

4.2 重啟mysql
service mysql.server stop
cd /usr/local/mysql/bin
./mysqld --defaults-file=/etc/my.cnf --user=root&

4.3 登入mysql
/usr/local/mysql/bin/mysql  -uroot -p123456

4.3.1 (個人推測)由於修改了加密規則,會導致舊密碼無法使用,需要先修改/etc/my.cnf 啟用skip-grant-tables
4.3.2  登入 /usr/local/mysql/bin/mysql  -uroot -p123456 此時能登陸成功。
(由於開啟了skip-grant-tables,無法修改密碼,需要再修改/etc/my.cnf 註釋掉skip-grant-tables)
4.3.3  當前的mysql登陸不能退出,需要再另一個視窗重新開啟Linux連線,修改/etc/my.cnf 註釋掉skip-grant-tables,並執行service mysql.server reload。


4.4 重新設定密碼
mysql>ALTER USER 'root'@'%' IDENTIFIED BY '123456' PASSWORD EXPIRE NEVER;
mysql>ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';

4.5 navicat重新連線成功