最近要使用窗口函數,但是要用到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_USER
SQL模式對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 USER
ALTER 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 query
,checking query cache for query
,invalidating query cache entries
,sending cached result to client
,storing result in query cache
,Waiting 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模式被移除:
DB2
,MAXDB
,MSSQL
,MYSQL323
,MYSQL40
,ORACLE
,POSTGRESQL
,NO_FIELD_OPTIONS
,NO_KEY_OPTIONS
,NO_TABLE_OPTIONS
。它們不能再分配給sql_mode
系統變量或用作mysqldump--compatible
選項的允許值 。刪除
MAXDB
意味着將或 的TIMESTAMP
數據類型 視爲 ,而不再視爲。CREATE TABLE
ALTER TABLE
TIMESTAMP
DATETIME
子句 的不推薦使用
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()
代替。