1、下載相應的MySQL版本
2、解壓到home目錄下
3、修改my.cnf
[client]
port = 3306
# MySQL客戶端默認端口號
socket = /home/mysql/mysql-8.0.20/socket/mysql.sock
# 用於本地連接的Unix套接字文件存放路徑
default-character-set = utf8mb4
# MySQL客戶端默認字符集
[mysql]
auto-rehash
# 開啟tab補齊功能
# 用於本地連接的Unix套接字文件存放路徑
default-character-set = utf8mb4
# MySQL客戶端默認字符集
max_allowed_packet = 256M
# 指定在網絡傳輸中一次消息傳輸量的最大值。系統默認值 為1MB,最大值是1GB,必須設置1024的倍數。
log_error = /home/mysql/mysql-8.0.20/logs/error_log/error.log
[mysqld]
port = 3306
# MySQL服務端默認監聽的TCP/IP端口
socket = /home/mysql/mysql-8.0.20/socket/mysql.sock
# 用於本地連接的Unix套接字文件存放路徑
pid_file = /home/mysql/mysql-8.0.20/tmp/mysql.pid
# 進程ID文件存放路徑
basedir = /home/mysql/mysql-8.0.20
# MySQL軟件安裝路徑
datadir = /home/mysql/mysql-8.0.20/data
# MySQL數據文件存放路徑
tmpdir = /home/mysql/mysql-8.0.20/tmp
# MySQL臨時文件存放路徑
character_set_server = utf8mb4
# MySQL服務端字符集
collation_server = utf8mb4_general_ci
# MySQL服務端校對規則
default-storage-engine = InnoDB
# 設置默認存儲引擎為InnoDB
autocommit = OFF
# 默認為ON,設置為OFF,關閉事務自動提交
transaction_isolation = READ-COMMITTED
event_scheduler = ON
# 開啟事件調度器event_scheduler
lower_case_table_names = 1
# 庫名、表名是否區分大小寫。默認為0,設置1,不區分大小寫,創建的表、數據庫都以小寫形式存放磁盤。
########################################
# #
# Network & Connection #
# #
########################################
max_connections = 1000
# MySQL允許的最大並發連接數,默認值151,如果經常出現Too Many Connections的錯誤提示,則需要增大此值。
max_user_connections = 1000
# 每個數據庫用戶的最大連接,(同一個賬號能夠同時連接到mysql服務的最大連接數),默認為0,表示不限制。
back_log = 500
# MySQL監聽TCP端口時設置的積壓請求棧大小,默認50+(max_connections/5),最大不超過900
max_connect_errors = 10000
# 每個主機的連接請求異常中斷的最大次數。對於同一主機,如果有超出該參數值個數的中斷錯誤連接,則該主機將被禁止連接。如需對該主機進行解禁,執行:FLUSH HOST。
interactive_timeout = 28800
# 服務器關閉交互式連接前等待活動的秒數。交互式客戶端定義為在mysql_real_connect()中使用CLIENT_INTERACTIVE選項的客戶端。默認值:28800秒(8小時)
wait_timeout = 28800
# 服務器關閉非交互連接之前等待活動的秒數。默認值:28800秒(8小時)
# 指定一個請求的最大連接時間,當MySQL連接閑置超過一定時間后將會被強行關閉。對於4GB左右內存的服務器來說,可以將其設置為5~10。
# 如果經常出現Too Many Connections的錯誤提示,或者show processlist命令發現有大量sleep進程,則需要同時減小interactive_timeout和wait_timeout值。
connect_timeout = 28800
# 在獲取連接時,等待握手的超時秒數,只在登錄時生效。主要是為了防止網絡不佳時應用重連導致連接數漲太快,一般默認即可。
open_files_limit = 5000
# mysqld能打開文件的最大個數,默認最小1024,如果出現too mant open files之類的就需要增大該值。
max_allowed_packet = 256M
# 指定在網絡傳輸中一次消息傳輸量的最大值。系統默認值 為1MB,最大值是1GB,必須設置1024的倍數。
########################################
# #
# Thread & Buffer #
# #
########################################
sort_buffer_size = 2M
# 排序緩沖區大小,connection級參數,默認大小為2MB。如果想要增加ORDER BY的速度,首先看是否可以讓MySQL使用索引,其次可以嘗試增大該值。
read_buffer_size = 160M
# 順序讀緩沖區大小,connection級參數,該參數對應的分配內存是每連接獨享。對表進行順序掃描的請求將分配一個讀入緩沖區。
read_rnd_buffer_size = 160M
# 隨機讀緩沖區大小,connection級參數,該參數對應的分配內存是每連接獨享。默認值256KB,最大值4GB。當按任意順序讀取行時,將分配一個隨機讀緩存區。
join_buffer_size = 320M
# 聯合查詢緩沖區大小,connection級參數,該參數對應的分配內存是每連接獨享。
bulk_insert_buffer_size = 64M
# 批量插入數據緩存大小,可以有效提高插入效率,默認為8M
thread_cache_size = 8
# 服務器線程緩沖池中存放的最大連接線程數。默認值是8,斷開連接時如果緩存中還有空間,客戶端的線程將被放到緩存中,當線程重新被請求,將先從緩存中讀取。
# 根據物理內存設置規則如下:1G —> 8,2G —> 16,3G —> 32,大於3G —> 64
thread_stack = 256K
# 每個連接被創建時,mysql分配給它的內存。默認192KB,已滿足大部分場景,除非必要否則不要動它,可設置范圍128KB~4GB。
# query_cache_type = 0
# 關閉查詢緩存
# query_cache_size = 0
# 查詢緩存大小,在高並發,寫入量大的系統,建議把該功能禁掉。
# query_cache_limit = 4M
# 指定單個查詢能夠使用的緩沖區大小,缺省為1M
tmp_table_size = 1024M
# MySQL的heap(堆積)表緩沖大小,也即內存臨時表,默認大小是 32M。如果超過該值,則會將臨時表寫入磁盤。在頻繁做很多高級 GROUP BY 查詢的DW環境,增大該值。
# 實際起限制作用的是tmp_table_size和max_heap_table_size的最小值。
max_heap_table_size = 1024M
# 用戶可以創建的內存表(memory table)的大小,這個值用來計算內存表的最大行數值。
table_definition_cache = 400
# 表定義緩存區,緩存frm文件。表定義(global)是全局的,可以被所有連接有效的共享。
table_open_cache = 1000
# 所有SQL線程可以打開表緩存的數量,緩存ibd/MYI/MYD文件。 打開的表(session級別)是每個線程,每個表使用。
table_open_cache_instances = 4
# 對table cache 能拆成的分區數,用於減少鎖競爭,最大值64.
skip-external-locking
#skip-locking
# 避免MySQL的外部鎖定,減少出錯幾率,增強穩定性。
skip-name-resolve
# 禁止MySQL對外部連接進行DNS解析,消除MySQL進行DNS解析。如果開啟該選項,所有遠程主機連接授權都要使用IP地址方式,否則MySQL將無法正常處理連接請求!
#skip-networking
# 不允許CP/IP連接,只能通過命名管道(Named Pipes)、共享內存(Shared Memory)或Unix套接字(Socket)文件連接。
# 如果Web服務器以遠程連接方式訪問MySQL數據庫服務器,則不要開啟該選項,否則無法正常連接!
# 適合應用和數據庫共用一台服務器的情況,其他客戶端無法通過網絡遠程訪問數據庫
########################################
# #
# Logs #
# #
########################################
################### Slow Log ######################
slow_query_log = ON
# 開啟慢查詢日志
slow_query_log_file = /home/mysql/mysql-8.0.20/logs/slow_log/slow.log
# 慢查詢日志存放路徑
long_query_time = 10
# 超過10秒的查詢,記錄到慢查詢日志,默認值10
log_queries_not_using_indexes = ON
# 沒有使用索引的查詢,記錄到慢查詢日志,可能引起慢查詢日志快速增長
log_slow_admin_statements = ON
# 執行緩慢的管理語句,記錄到慢查詢日志
# 例如 ALTER TABLE, ANALYZE TABLE, CHECK TABLE, CREATE INDEX, DROP INDEX, OPTIMIZE TABLE, and REPAIR TABLE.
################### Error Log ####################
log_error = /home/mysql/mysql-8.0.20/logs/error_log/error.log
# 錯誤日志存放路徑
log_error_verbosity = 2
# 全局動態變量,默認3,范圍:1~3
# 表示錯誤日志記錄的信息,1:只記錄error信息;2:記錄error和warnings信息;3:記錄error、warnings和普通的notes信息
########################################
# #
# Replication #
# #
########################################
################### Bin Log ######################
server_id = 6
# 數據庫服務器ID
log_bin = /home/mysql/mysql-8.0.20/logs/bin_log/binlog
# 二進制日志存放路徑
log_bin_index = /home/mysql/mysql-8.0.20/logs/bin_log/binlog.index
# 同binlog,定義binlog的位置和名稱
binlog_format = row
# binlog格式,復制有3種模式STATEMENT,ROW,MIXED
# expire_logs_days = 10
# 只保留最近10天的binlog日志
max_binlog_size = 50M
# 每個binlog日志文件的最大容量
binlog_cache_size = 2M
# 每個session分配的binlog緩存大小
# 事務提交前產生的日志,記錄到Cache中;事務提交后,則把日志持久化到磁盤
log_slave_updates = ON
# 開啟log_slave_updates,從庫的更新操作記錄進binlog日志
sync_binlog = 1
# sync_binlog=0(默認),事務提交后MySQL不刷新binlog_cache到磁盤,而讓Filesystem自行決定,或者cache滿了才同步。
# sync_binlog=n,每進行n次事務提交之后,MySQL將binlog_cache中的數據強制寫入磁盤。
binlog_rows_query_log_events = ON
# 將row模式下的sql語句,記錄到binlog日志,默認是0(off)
[mysqldump]
max_allowed_packet = 256M
quick
# mysqldump導出大表時很有用,強制從服務器查詢取得記錄直接輸出,而不是取得所有記錄后將它們緩存到內存中。
[mysqlhotcopy]
interactive-timeout
[mysqld_safe]
#ledir = /app/mysql/bin
# 包含mysqld程序的軟件安裝路徑,用該選項來顯式表示服務器位置。
log_error = /home/mysql/mysql-8.0.20/logs/error_log/error.log
4、執行初始化命令
sudo /home/mysql/mysql-8.0.20/bin/mysqld --defaults-file=/home/mysql/mysql-8.0.20/conf/my.cnf --initialize --user=mysql --basedir=/home/mysql/mysql-8.0.20 --datadir=/home/mysql/mysql-8.0.20/data --log-error=/home/mysql/mysql-8.0.20/logs/error_log/error.log
注意:執行完后需要查看log中隨機生成的密碼
5、修改support-files下的mysql.server文件
basedir=MySQL的home路徑
datadir=MySQL的home路徑/data
6、sudo mysql.server start
7、使用隨機生成的密碼登錄
8、修改密碼
alter user 'root'@'localhost' identified by '123456';
9、在/usr/lib/systemd/system添加mysql.service,內容如下
[Unit]
Description=Mysql
Documentation=man:mysqld
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=syslog.target network.target remote-fs.target nss-lookup.target
[Service]
User=mysql # 此用戶必須存在,即為啟動mysql的用戶
Group=mysql
Type=forking
ExecStart=/home/mysql/mysql-8.0.20/bin/mysqld
--defaults-file=/home/mysql/mysql-8.0.20/conf/my.cnf
--basedir=/home/mysql/mysql-8.0.20
--datadir=/home/mysql/mysql-8.0.20/data
--plugin-dir=/home/mysql/mysql-8.0.20/lib/plugin
--user=mysql
--log-error=/home/mysql/mysql-8.0.20/log/mysql.err
--open-files-limit=65000
--pid-file=/home/mysql/mysql-8.0.20/tmp/mysql.pid
--socket=/home/mysql/mysql-8.0.20/socket/mysql.sock
--port=3306
#根據自己配置,編寫啟動命令
ExecStop=/home/mysql/mysql-8.0.20/bin/mysqladmin shutdown -p123456
PrivateTmp=false
[Install]
WantedBy=multi-user.target
或者
[Unit]
Description=Mysql
Documentation=man:mysqld
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=syslog.target network.target remote-fs.target nss-lookup.target
[Service]
User=mysql # 此用戶必須存在,即為啟動mysql的用戶
Group=mysql
Type=forking
PIDFile=/home/mysql/mysql-8.0.20/tmp/mysql.pid
ExecStart=/home/mysql/mysql-8.0.20/support-files/mysql.server start
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=false
[Install]
WantedBy=multi-user.target
10、保存退出后,重載systemctl;systemctl daemon-reload
11、systemctl enable mysql 設置開機自啟動
systemctl start mysql
systemctl stop mysql
systemctl status mysql
systemctl restart mysql