Linux 安裝mysql8詳細教程

最近要使用窗口函數,但是要用到mysql8版本,所以在這記錄一下Linux下安裝MySQL8步驟

本文以CentOS 7 爲例,詳細教你如何在Linux下安裝MySQL-8.0.19

安裝的mysql 版本是:mysql-8.0.19-linux-glibc2.12-x86_64.tar.xz

使用root權限操作

第一步:下載



 兩種方式

1、

進入官網 https://dev.mysql.com/downloads/mysql/

上圖顯示第一個是二進制源碼包,第二個是二進制測試包,第三個是源碼包。我們選擇第一個二進制版本的mysql是已經編譯好的,無需 configure ,make make install 等步驟,只需配置一下即可使用,卸載也方便,直接刪除即可。可以自行調整編譯參數,最大化地定製安裝結果。

下載之後,通過ssh工具sftp/ftp方式上傳到你服務器centos7指定的目錄即可/usr/local/

2、

 在你要放置安裝包的目錄下執行命令:

wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.19-linux-glibc2.12-x86_64.tar.xz


第二步:解壓並移動


首先說一下,移動不是必須的,但是我後面的配置裏有指定文件目錄,並且在Mac上安裝mysql 默認也會放到 /usr/local ,所有最好按我的來。

xz格式拓展知識: tar  -Jxvf  mysql-8.0.19-linux-glibc2.12-x86_64.tar.xz

1. 解壓 xz 格式文件
 
方法一:
需要用到兩步命令:
  首先利用 xz-utils 的 xz 命令將 linux-3.12.tar.xz 解壓爲 linux-3.12.tar,
  其次用 tar 命令將 linux-3.12.tar 完全解壓。
xz -d linux-3.12.tar.xz
tar -xf linux-3.12.tar
方法二(推薦)
tar -Jxf linux-3.12.tar.xz

2. 創建 xz 格式文件
方法一:
也是用到兩步命令:
  首先利用 tar 命令將 linux-3.12 文件夾打包成 linux-3.12.tar
  其次用 xz-utils 的 xz 命令將 linux-3.12.tar 壓縮成 linux-3.12.tar.xz。
tar -cf linux-3.12.tar linux-3.12/
xz -z linux-3.12.tar
方法二(推薦)
tar -Jcf linux-3.12.tar.xz linux-3.12/

解壓(如果是.xz格式可以使用  tar  -Jxvf  mysql-8.0.19-linux-glibc2.12-x86_64.tar.xz)

tar -zxvf mysql-8.0.19-linux-glibc2.12-x86_64.tar.gz

移動(若上傳的地方不是/uar/local/路徑可以用mv命令移動)

mv mysql-8.0.19-linux-glibc2.12-x86_64 /usr/local/

1 重命名(改名和軟連接,二選一

mv mysql-8.0.19-linux-glibc2.12-x86_64 mysql8

或者使用
2 想弄軟連接命令 : 

ln -s mysql-8.0.19-linux-glibc2.12-x86_64 mysql8


第三步:創建 用戶,並給數據目錄賦予權限


創建mysql組和用戶

groupadd mysql useradd -r -g mysql mysql

創建mysql數據目錄 / 回到根目錄

cd / && mkdir -p /data/mysql8_data/

賦予權限

chown mysql:mysql -R /data/mysql8_data
chmod 750 /data/mysql8_data/ -R

爲了避免在使用MySQL時總是必須鍵入客戶端程序的路徑名,可以將/usr/local/mysql/bin 目錄添加到PATH變量中:

export PATH=$PATH:/usr/local/mysql8/bin

 


第四步:my.cnf配置參數

創建用於初始化mysql數據庫時my.cnf配置文件

默認讀取配置文件的順序:
Default options are read from the following files in the given order:
1. /etc/my.cnf 2./etc/mysql/my.cnf  3./usr/local/mysql/etc/my.cnf  4.~/.my.cnf

vim /etc/my.cnf然後 按 i 進入編輯模式,把下面內容複製進去

[mysql]
# 設置mysql客戶端默認字符集
default-character-set=utf8mb4
[client]
port       = 3306
socket     = /tmp/mysql.sock

[mysqld]
port       = 3306
server-id  = 3306
user       = mysql
socket     = /tmp/mysql.sock
# 設置mysql的安裝目錄
basedir    = /usr/local/mysql8
# 設置mysql數據庫的數據的存放目錄
datadir    = /data/mysql8_data/mysql
log-bin    = /data/mysql8_data/mysql/mysql-bin
innodb_data_home_dir      =/data/mysql8_data/mysql
innodb_log_group_home_dir =/data/mysql8_data/mysql
#設置mysql數據庫的日誌及進程數據的存放目錄
log-error =/data/mysql8_data/mysql/mysql.log
pid-file  =/data/mysql8_data/mysql/mysql.pid
# 服務端使用的字符集默認爲8比特編碼
character-set-server=utf8mb4
lower_case_table_names=1
autocommit =1

##################以上要修改的########################
skip-external-locking
key_buffer_size = 256M
max_allowed_packet = 1M
table_open_cache = 1024
sort_buffer_size = 4M
net_buffer_length = 8K
read_buffer_size = 4M
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 64M
thread_cache_size = 128

#query_cache_size = 128M
tmp_table_size = 128M
explicit_defaults_for_timestamp = true
max_connections = 500
max_connect_errors = 100
open_files_limit = 65535

binlog_format=mixed

binlog_expire_logs_seconds =864000

# 創建新表時將使用的默認存儲引擎
default_storage_engine = InnoDB
innodb_data_file_path = ibdata1:10M:autoextend
innodb_buffer_pool_size = 1024M
innodb_log_file_size = 256M
innodb_log_buffer_size = 8M
innodb_flush_log_at_trx_commit = 1
innodb_lock_wait_timeout = 50
transaction-isolation=READ-COMMITTED

[mysqldump]
quick
max_allowed_packet = 16M

[myisamchk]
key_buffer_size = 256M
sort_buffer_size = 4M
read_buffer = 2M
write_buffer = 2M

[mysqlhotcopy]
interactive-timeout

編輯完後 按esc 後按住 shift+: 輸入 wq表示保存並退出 :wq!

第五步:初始化mysql

cd  /usr/local/mysql8/bin
#一行
./mysqld --defaults-file=/usr/local/etc/my.cnf --basedir=/usr/local/mysql8 --datadir=/data/mysql8_data/mysql --user=mysql --initialize 

參數說明

--defaults-file=/usr/local/etc/my.cnf 指定配置文件(一定要放在最前面,至少 --initialize 前面)
--user=mysql 指定用戶(很關鍵)
--basedir=/usr/local/mysql/ 指定安裝目錄
--datadir=/usr/local/mysql/data/ 指定初始化數據目錄

1.1 
--initialize 初始化生成臨時密碼
臨時密碼登錄
mysql -u root -p
輸入服務器在初始化序列期間生成的隨機臨時密碼:
1.2
--initialize-insecure 初始化時無密碼
無密碼登錄
mysql -u root --skip-password

2.
修改新密碼:
ALTER USER 'root'@'localhost' IDENTIFIED BY '你的新密碼';
3.創建訪問用戶及主機ip
如果你配置時使用了skip_name_resolve,要創建一下127.0.0.1用戶及主機ip
CREATE USER 'root'@'127.0.0.1' IDENTIFIED BY '你的新密碼';
創建遠程訪問用戶任意ip
CREATE USER 'root'@'%' IDENTIFIED BY '你的新密碼';

 

查看mysql.log初始密碼,複製出來
cat /data/mysql8_data/mysql/mysql.log


第六步:啓動mysql,並更改root 密碼


啓動

安全後臺啓動:(如果您的安裝包含mysqld_safe,則像這樣啓動MySQL服務器)

bin/mysqld_safe --defaults-file=/usr/local/etc/my.cnf &
./mysqld_safe --defaults-file=/usr/local/etc/my.cnf &

如果您的安裝包含systemd支持,請按以下方式啓動服務器:

1. systemctl {start|stop|restart|status} mysqld
對於systemctl或 service命令,如果MySQL服務名稱不是mysqld,請使用適當的名稱。例如,
使用mysql而不是 mysqld在基於Debian的系統和SLES系統上使用。
修改配置文件時:
systemctl daemon-reload
systemctl restart mysqld

2. 使用與System V系統兼容的service命令(具有相反的參數):
service mysqld {start|stop|restart|status}

查看是否啓動

ps -ef|grep mysql #查看mysql 進程

netstat -ano |grep "3306" #查看3306端口

更改密碼
提示輸入密碼,把剛纔臨時的密碼粘過來。

cd /usr/local/mysql8/bin
 ./mysql -u root -p
password:輸入臨時密碼

2.無密碼時登錄
./mysql -u root --skip-password

然後執行修改密碼與root用戶,主機host ip,並刷新權限

1 修改新密碼123456:
ALTER USER 'root'@'localhost' IDENTIFIED with mysql_native_password BY '你的新密碼';
#首次改密推薦使用本地密碼插件

use mysql;
select user,host,plugin,authentication_string from user;
CREATE user 'root'@'%'; #創建用戶任意遠程訪問
alter user 'root'@'%' identified with mysql_native_password by '123456'; #修改密碼
grant all privileges on *.* to "root"@"%"; #給用戶授權
flush privileges; #刷新權限
更改具體用戶遠程訪問
CREATE USER 'root'@'127.0.0.1' IDENTIFIED with mysql_native_password BY '123456'; 創建'root'@'127.0.0.1'用戶
flush privileges; #===> 記住刷新權限
select user,host,plugin,authentication_string from user;

===============57以後===================
update user set authentication_string=password("test") where user='root';
update mysql.user set host='你要指定的主機ip' where user='root';
============以下5.7以前======================
2 或者
SET PASSWORD = PASSWORD('123456');
ALTER USER 'root'@'localhost' PASSWORD EXPIRE NEVER;
flush privileges;
select user,host,plugin,authentication_string from user;
#退出mysql>
quit;或者exit;
#關閉mysql
shutdown;
修改MySQL用戶密碼
mysqladmin -u用戶名 -p舊密碼 password 新密碼

3 或進入mysql命令行
SET PASSWORD FOR '用戶名'@'主機' = PASSWORD(‘密碼');
flush privileges;

添加帳戶,分配特權和刪除帳戶 

use mysql;
#創建新用戶及密碼
CREATE USER 'root'@'localhost' IDENTIFIED with mysql_native_password  BY '新密碼';
CREATE USER 'root'@'%' IDENTIFIED with mysql_native_password  BY '123456';
CREATE USER 'mysql'@'%' IDENTIFIED with mysql_native_password  BY '123456';
CREATE USER 'test'@'%' IDENTIFIED with mysql_native_password  BY '123456';
#給用戶授權
GRANT ALL ON *.* TO 'root'@'localhost' WITH GRANT OPTION;
GRANT ALL ON *.* TO 'root'@'%' WITH GRANT OPTION;
GRANT ALL ON *.* TO 'mysql'@'%' WITH GRANT OPTION;
GRANT ALL ON *.* TO 'test'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
select user,host,plugin,authentication_string from user;
#撤消test數據庫級特權
REVOKE CREATE,DROP ON test.* FROM 'test'@'%';
FLUSH PRIVILEGES;
#刪除帳戶
DROP USER 'test'@'%';
FLUSH PRIVILEGES;

創建遠程訪問新用戶並授權:

use mysql;
#mysql8 不允許授權並創建用戶了,要分開使用
grant all privileges on *.* to '新用戶名'@'%' identified by '密碼' with grant option;
grant all privileges on *.* to '新用戶名'@'指定ip' identified by '密碼' with grant option;
例如:以前使用
grant all privileges on *.* to 'root'@'%' identified by "123456" with grant option;
mysql8分開操作爲:
CREATE ROLE 'root'@'%'; #創建角色CREATE USER 'root'@'%' IDENTIFIED BY '123456';
ALTER USER 'root'@'%' IDENTIFIED with mysql_native_password by '123456'; #修改密碼
grant all privileges on *.* to "root"@"%"; #給角色授權
flush privileges; #刷新權限

#另外修改主機
update mysql.user set host='具體要指定的主機ip' where user='root';
RENAME USER 'jeffrey'@'localhost' TO 'jeff'@'127.0.0.1'; #重命名
flush privileges; #刷新權限
select user,host,authentication_string from user;

注意:

1.確保用戶名和密碼正確

2.確保開放3306端口 並開啓防火牆service iptables start

到這裏就結束了,如果想退出mysql>quit或者exit ,關閉mysql 執行 service mysqld stop

創建開機自啓動mysql服務

#確保my.cnf在路徑/etc/my.cnf 
cd /usr/local/mysql8/
 cp support-files/mysql.server /etc/rc.d/init.d/mysqld #錯誤 unit not found
 chmod +x /etc/init.d/mysql
 chkconfig --add mysqld 
 chkconfig --level 345 mysqld on

cd /usr/local/mysql8/
cp support-files/mysql.server /etc/rc.d/init.d/mysqld
啓動:service mysqld start
停止:service mysqld stop
重啓:service mysqld restart
重載配置:service mysqld reload

注意事項:

如果以上步驟有權限問題,可執行以下命令,還有把開啓自起打開

出現unit not found 可以檢查/etc/init.d/mysql是否存在,若否,
find / -name mysql.server 
cp /usr/local/mysql8/support-files/mysql.server /etc/init.d/mysql
cp ./support-files/mysql.server /etc/init.d/mysqld
chown 777 /etc/my.cnf 
chmod +x /etc/init.d/mysqld 
還有在安裝前如果你的系統有Mariadb,就要卸載

第一條命令用來查看,如果有就用下面的命令卸載

rpm -qa|grep mariadb
rpm -e --nodeps mariadb-libs-5.5.44-2.el7.centos.x86_64 #查詢出的版本

窗口函數:

https://dev.mysql.com/doc/refman/8.0/en/window-functions.html

mysql8部分刪除內容:

  • 與帳戶管理相關的以下功能已刪除:

    • 使用GRANT創建用戶。而是使用CREATE USER。遵循這種做法會使 NO_AUTO_CREATE_USERSQL模式對GRANT 語句不重要,因此也將其刪除,並且當sql_mode選項文件中選項的該值的存在阻止mysqld啓動時,現在會將錯誤寫入服務器日誌。

    • 使用GRANT修改不是權限指派其他帳戶屬性。這包括身份驗證,SSL和資源限制屬性。而是在創建帳戶時使用CREATE USER或在之後使用修改這些 屬性ALTER USER

    • IDENTIFIED BY PASSWORD 'auth_string'CREATE USER 和的 語法GRANT。而是使用 for 和 ,其中 值的格式與命名插件兼容。 IDENTIFIED WITH auth_plugin AS 'auth_string'CREATE USERALTER USER'auth_string'

      此外,由於IDENTIFIED BY PASSWORD刪除了語法,因此 log_builtin_as_identified_by_password 系統變量是多餘的,並且已刪除。

    • PASSWORD()功能。此外,PASSWORD()刪除意味着 語法不再可用。 SET PASSWORD ... = PASSWORD('auth_string')

    • old_passwords系統變量。

  • 查詢緩存已刪除。刪除包括以下項目:

    • FLUSH QUERY CACHE和 RESET QUERY CACHE語句。

    • 這些系統變量: query_cache_limit, query_cache_min_res_unit, query_cache_size, query_cache_type, query_cache_wlock_invalidate

    • 這些狀態變量: Qcache_free_blocks, Qcache_free_memory, Qcache_hits, Qcache_inserts, Qcache_lowmem_prunes, Qcache_not_cached, Qcache_queries_in_cache, Qcache_total_blocks

    • 這些線程狀態:checking privileges on cached querychecking query cache for queryinvalidating query cache entriessending cached result to clientstoring result in query cacheWaiting for query cache lock

    • SQL_CACHE SELECT修改。

    這些不贊成使用的查詢緩存項仍然不贊成使用,但沒有效果,將在以後的MySQL版本中刪除:

    • SQL_NO_CACHE SELECT 修飾符。

    • ndb_cache_check_time系統變量。

    have_query_cache系統變量保持過時,總有一個價值 NO,並會在將來的MySQL版本中刪除。

  • 數據字典提供有關數據庫對象的信息,因此服務器不再檢查數據目錄中的目錄名稱以查找數據庫。因此, --ignore-db-dir選項和 ignore_db_dirs系統變量是多餘的並被刪除。

  • DDL日誌(也稱爲元數據日誌)已被刪除。從MySQL 8.0.3開始,此功能由數據字典innodb_ddl_log表處理 。請參閱 查看DDL日誌

  • tx_isolation和 tx_read_only系統變量已被刪除。使用transaction_isolation和 transaction_read_only代替。

  • sync_frm系統變量已被刪除,因爲.frm文件已經過時。

  • secure_auth系統變量和 --secure-auth客戶端選項已被刪除。C API函數的MYSQL_SECURE_AUTH選項mysql_options()已刪除。

  • multi_range_count系統變量被移除。

  • log_warnings系統變量和 --log-warnings服務器選項已被刪除。請改用 log_error_verbosity系統變量。

  • sql_log_bin系統變量 的全局範圍 已刪除。sql_log_bin僅具有會話作用域,@@GLOBAL.sql_log_bin應調整依賴於訪問的應用程序 。

  • metadata_locks_cache_size和 metadata_locks_hash_instances系統變量被刪除。

  • 未使用date_format, datetime_format, time_format,和 max_tmp_tables系統變量被刪除。

  • 這些棄用兼容性SQL模式被移除: DB2MAXDB, MSSQLMYSQL323, MYSQL40ORACLE, POSTGRESQL, NO_FIELD_OPTIONS, NO_KEY_OPTIONS, NO_TABLE_OPTIONS。它們不能再分配給sql_mode系統變量或用作mysqldump --compatible選項的允許值 。

    刪除MAXDB意味着將或 的 TIMESTAMP數據類型 視爲 ,而不再視爲。 CREATE TABLEALTER TABLETIMESTAMPDATETIME

  • 子句 的不推薦使用ASC或 DESC限定符將GROUP BY被刪除。先前依賴於GROUP BY排序的查詢所產生的結果可能與以前的MySQL版本不同。要產生給定的排序順序,請提供一個ORDER BY 子句。

  • 該語句的EXTENDED和 PARTITIONS關鍵字 EXPLAIN已刪除。這些關鍵字是不必要的,因爲它們的效果始終處於啓用狀態。

  • 這些與加密有關的項目已刪除:

    • ENCODE()和 DECODE()功能。

    • ENCRYPT()功能。

    • DES_ENCRYPT(),和 DES_DECRYPT()功能的 --des-key-file選項, have_crypt系統變量,則 DES_KEY_FILE該選項 FLUSH語句和 HAVE_CRYPT CMake的 選項。

    代替刪除的加密功能:對於 ENCRYPT(),請考慮SHA2()改爲使用 單向哈希。對於其他,請考慮使用 AES_ENCRYPT()和 AES_DECRYPT()代替。

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