雲服務器從購買到部署環境lnmp(完)

三、源碼安裝最新MySQL8.0.11

MySQL8.0版本比MySQL5.7要快2倍,更快的性能和大量的改進
MySQL8.0版本簡介 https://www.cnblogs.com/mr7664/articles/9857621.html

3.1安裝Mysql

3.1.1下載

MySQL下載地址:http://dev.mysql.com/get/Downloads/MySQL-8.0.11/mysql-8.0.11.tar.gz/from/http://cdn.mysql.com/ (建議)

流程參考2.2.1

或者

wget -c http://dev.mysql.com/get/Downloads/MySQL-8.0.11/mysql-8.0.11.tar.gz/from/http://cdn.mysql.com/

3.3.2安裝相關依賴包

yum -y install wget cmake gcc gcc-c++ ncurses ncurses-devel libaio-devel openssl openssl-devel bison

3.1.3解壓

cd /data/Software(你剛纔把壓縮包複製到的位置)

tar -zxvf mysql-8.0.11.tar.gz 

3.1.4創建存放目錄

用作軟件存放目錄

mkdir /etc/mysql

用作數據存放目錄

mkdir -p /data/mysqldata/3306

3.1.5安裝前的配置,指定安裝目錄

跳轉到剛纔解壓好的目錄下

cd /data/Software/mysql-8.0.11
注意:這裏指定了剛纔創建的1軟件存放目錄2數據存放目錄
cmake -DCMAKE_INSTALL_PREFIX=/etc/mysql -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DENABLED_LOCAL_INFILE=ON -DWITH_INNODB_MEMCACHED=ON -DWITH_SSL=system -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_FEDERATED_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DWITH_ARCHIVE_STORAGE_ENGINE=1 -DWITHOUT_EXAMPLE_STORAGE_ENGINE=1 -DWITH_PERFSCHEMA_STORAGE_ENGINE=1 -DCOMPILATION_COMMENT="zsd edition" -DDOWNLOAD_BOOST=1 -DWITH_BOOST=/tmp -DMYSQL_UNIX_ADDR=/data/mysqldata/3306/mysql.sock -DMYSQL_UNIX_ADDR=/data/mysqldata/3306/mysql.sock -DSYSCONFDIR=/data/mysqldata/3306

3.1.5編譯和安裝

使用SWAP創建交換分區 並 開啓
dd if=/dev/zero of=/swapfile bs=64M count=16	

注:block_size、number_of_block 大小可以自定義,比如 bs=64M count=16代表設置 1G 大小 SWAP 分區。

mkswap /swapfile
swapon /swapfile

如果不交換分區,可能好內存不足,出現以下情況

在這裏插入圖片描述
出現error,內存不足,使用臨時分區。畢竟我的阿里雲是1核+2G內存。。


make很慢,我花了1個多小時
make

在這裏插入圖片描述

make install

在這裏插入圖片描述

安裝成功!

清理編譯文件
make clean
關閉分區,並刪除交換文件
swapoff /swapfile
rm /swapfile

結果

在這裏插入圖片描述

3.2配置MySQL環境等

3.2.1創建一個用戶組mysql和其下的用戶mysql

如果你想刪除某用戶和用戶組↓

刪除用戶名
cd/home
vipw
刪除對應用戶名:wq保存
刪除用戶組
cd /home
vipw -s
刪除對應用戶組:wq!強制保存


查看用戶組
cat /etc/group
vi /etc/group
再次刪除:wq保存

添加用戶組、用戶名

groupadd mysql

useradd -g mysql mysql

3.2.2設置用戶操作系統的資源限制

vi /etc/security/limits.conf

在文檔底下添加

mysql soft nproc 65536
mysql hard nproc 65536
mysql soft nofile 65536
mysql hard nofile 65536
驗證limit是否生效
su - mysql
ulimit -a

返回root用戶,因爲下面需要創建目錄還有chmod給權限

su root 

在這裏插入圖片描述

3.2.3創建MySQL數據目錄及賦予相應權限

mkdir -p /data/mysqldata/{3306/{data,tmp,binlog,innodb_ts,innodb_log},backup,scripts}
chown -R mysql:mysql /data/mysqldata
su - mysql

3.2.4配置my.cnf文件

vi /data/mysqldata/3306/my.cnf


[client]
port = 3306
socket = /data/mysqldata/3306/mysql.sock
# The MySQL server
[mysqld]
port = 3306
user = mysql
socket = /data/mysqldata/3306/mysql.sock
pid-file = /data/mysqldata/3306/mysql.pid
basedir = /etc/mysql
datadir = /data/mysqldata/3306/data
tmpdir = /data/mysqldata/3306/tmp
open_files_limit = 60000
explicit_defaults_for_timestamp
server-id = 1203306
lower_case_table_names = 1
character-set-server = utf8
federated
#sql_mode=STRICT_TRANS_TABLES
max_connections = 1000
max_connect_errors = 100000
interactive_timeout = 86400
wait_timeout = 86400
sync_binlog=0
back_log=100
default-storage-engine = InnoDB
log_slave_updates = 1

#*********** Logs related settings ***********
log-bin = /data/mysqldata/3306/binlog/mysql-bin
binlog_format= mixed
binlog_cache_size=32m
max_binlog_cache_size=64m
max_binlog_size=512m
long_query_time = 1
log_output = FILE
log-error = /data/mysqldata/3306/mysql-error.log
slow_query_log = 1
slow_query_log_file = /data/mysqldata/3306/slow_statement.log
#log_queries_not_using_indexes
general_log = 0
general_log_file = /data/mysqldata/3306/general_statement.log
#expire-logs-days = 14
binlog_expire_logs_seconds = 1728000
relay-log = /data/mysqldata/3306/binlog/relay-bin
relay-log-index = /data/mysqldata/3306/binlog/relay-bin.index
#****** MySQL Replication New Feature*********
master-info-repository=TABLE
relay-log-info-repository=TABLE
relay-log-recovery
#*********** INNODB Specific options ***********
innodb_buffer_pool_size = 2048M
transaction-isolation=REPEATABLE-READ
innodb_buffer_pool_instances = 8
innodb_file_per_table = 1
innodb_data_home_dir = /data/mysqldata/3306/innodb_ts
innodb_data_file_path = ibdata1:2048M:autoextend
innodb_thread_concurrency = 8
innodb_log_buffer_size = 16M
innodb_log_file_size = 128M
innodb_log_files_in_group = 3
innodb_log_group_home_dir = /data/mysqldata/3306/innodb_log
innodb_flush_log_at_trx_commit = 2
innodb_max_dirty_pages_pct = 70
innodb_flush_method=O_DIRECT
[mysql]
no-auto-rehash
default-character-set=gbk
prompt = (\u@\h) [\d]>\_

3.2.5初始化MySQL

/etc/mysql/bin/mysqld --defaults-file=/data/mysqldata/3306/my.cnf --initialize --user=mysql

3.2.6啓動MySQL服務

/etc/mysql/bin/mysqld_safe --defaults-file=/data/mysqldata/3306/my.cnf --user=mysql

如果卡住就Ctrl+z直接掛起

完成

在這裏插入圖片描述

查看錯誤日誌(可忽略!!跳至3.2.7)

cat /data/mysqldata/3306/mysql-error.log

在這裏插入圖片描述

問題1:Ignoring…顯示用戶被忽略,權限問題(上面步驟已更改。請忽略!!)
解決:增加權限
chown -R mysql:mysql /etc/mysql
結果:沒有Ignoring錯誤
/etc/mysql/bin/mysqld_safe --defaults-file=/data/mysqldata/3306/my.cnf --user=root

cat /data/mysqldata/3306/mysql-error.log

在這裏插入圖片描述

問題2:找不到errmsg.sys文件(my.cnf路徑問題,上面的配置已改。請忽略!!)

查看文件是否存在
find / - name errmsg.sys

在這裏插入圖片描述

存在,打開my.cnf查看

在這裏插入圖片描述

解決:更改my.cnf中basedir目錄

在這裏插入圖片描述

結果:錯誤解決

/etc/mysql/bin/mysqld_safe --defaults-file=/data/mysqldata/3306/my.cnf --user=mysql

cat /data/mysqldata/3306/mysql-error.log

在這裏插入圖片描述

問題3:找不到mysql-bin.index文件(目錄和權限問題,上面步驟已更改。請忽略!!)

查找文件是否存在

find / -name mysql-bin.index

在這裏插入圖片描述

不存在…
查看my.cnf配置文件
vi /data/mysqldata/3306/my.cnf

在這裏插入圖片描述

到目錄底下看看
cd /data/mysqldata/3306/
ls
沒有發現binlog

在這裏插入圖片描述

解決:再執行一遍(原因是之前用mysql用戶來創建目錄和賦予權限沒有成功)
mkdir -p /data/mysqldata/{3306/{data,tmp,binlog,innodb_ts,innodb_log},backup,scripts}
chown -R mysql:mysql /data/mysqldata
再初始化一次然後啓動
/etc/mysql/bin/mysqld --defaults-file=/data/mysqldata/3306/my.cnf --initialize --user=mysql
/etc/mysql/bin/mysqld_safe --defaults-file=/data/mysqldata/3306/my.cnf --user=mysql

在這裏插入圖片描述

一直卡住因爲找不到mysql.sock,直接Ctrl+z
因爲是safe守護進程所以kill不掉,這裏選擇踢掉用戶關閉。或者重連一次連接
ps -ef|grep mysql(查看pts/幾)
pkill -kill -t pts/(幾)
/etc/mysql/bin/mysqld_safe --defaults-file=/data/mysqldata/3306/my.cnf --user=mysql

3.2.7登陸數據庫

cat /data/mysqldata/3306/mysql-error.log

在這裏插入圖片描述

顯示可以連接了!

查看mysql初始密碼

grep 'password' /data/mysqldata/3306/mysql-error.log

在這裏插入圖片描述

密碼是root用戶的

複製密碼粘貼登陸

/etc/mysql/bin/mysql -u root -p

登陸成功

在這裏插入圖片描述

3.2.8修改root密碼

設置爲本地登錄權限,使用sha256_password加密,360天密碼過期

mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH sha256_password BY '密碼' PASSWORD EXPIRE INTERVAL 360 DAY;

查看user

mysql> select user,host from mysql.user;

在這裏插入圖片描述

3.2.9配置環境變量(啓動直接輸入mysql而不用輸入一堆路徑)

vi /etc/profile.d/mysql.sh

將下面這句放入新建的文件中

export PATH=$PATH:/etc/mysql/bin

執行

source /etc/profile.d/mysql.sh

在這裏插入圖片描述

3.3設置systemctl服務啓動方式並開機自啓動

複製mysql.server

cp /etc/mysql/support-files/mysql.server /etc/init.d/mysql

添加可執行權限

chmod +x /etc/init.d/mysql

設置開機自動啓動

systemctl enable mysql

3.4設置遠程訪問MySQL

3.4.0如果想遠程連接,需要在你的windows安裝一個Navicat軟件

3.4.1遠程連接配置

mysql> use mysql;

mysql> select host,user,authentication_string,plugin from user;

發現所有的用戶host都是顯示localhost,(剛纔初始化密碼設的localhost)都是隻有本地權限

在這裏插入圖片描述

mysql> update user set host='%' where user='root';

在這裏插入圖片描述

mysql> flush privileges;

3.4.2設置防火牆

查看防火牆狀態
systemctl status firewalld

在這裏插入圖片描述

都是關閉的,配置下防火牆

啓動防火牆

systemctl start firewalld

超時

在這裏插入圖片描述

關閉再使用pkill殺下進程再啓動

systemctl stop firewalld
pkill -f firewalld
systemctl start firewalld

在這裏插入圖片描述

systemctl status firewalld

啓動成功

在這裏插入圖片描述

查看防火牆端口開啓狀態

在這裏插入圖片描述

無開放端口

永久添加22、3306、80端口
firewall-cmd --zone=public --add-port=22/tcp --permanent
firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --zone=public --add-port=80/tcp --permanent
systemctl restart 	firewalld
firewall-cmd --list-ports

在這裏插入圖片描述

3.4.2使用navicat遠程連接

這裏的常規是連接阿里雲服務器中的mysql,使用的是mysql的賬號密碼

在這裏插入圖片描述

這裏的SSH是連接阿里雲服務器,使用的服務器的賬號密碼

在這裏插入圖片描述

點擊“連接測試”

1251錯誤碼(如果你是最新版的Navicat估計不會有這個錯誤!!)

在這裏插入圖片描述

出現這個原因是mysql8 之前的版本中加密規則是mysql_native_password,而在mysql8之後,加密規則是caching_sha2_password, 解決問題方法有兩種,一種是升級navicat驅動,一種是把mysql用戶登錄密碼加密規則還原成mysql_native_password

這裏初始化root密碼的時候是設定sha256_password的,這裏還原成mysql_native_password吧。。

mysql> ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '密碼' PASSWORD EXPIRE INTERVAL 360 DAY;

在這裏插入圖片描述

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