ubuntu mysql

  • Post author:
  • 帖子最後修改:2021 年 6 月 5 日

在 Ubuntu 20.04 使用MySQL APT 存儲庫安裝 MySQL 8.0

第 1 步:在 Ubuntu 中添加 MySQL APT 存儲庫

Ubuntu 已經帶有默認的 MySQL 包存儲庫。為了添加或安裝最新的存儲庫,我們將安裝包存儲庫。使用以下命令下載存儲庫: 或者可以進入官往查看最新DEB 包https://dev.mysql.com/downloads/repo/apt/
				
					wget https://dev.mysql.com/get/mysql-apt-config_0.8.17-1_all.deb
				
			

下載後,通過運行以下命令安裝存儲庫:

				
					sudo dpkg -i mysql-apt-config_0.8.17-1_all.deb
sudo apt-get update && sudo apt-get upgrade
				
			

安裝 (順便裝mysql-workbench)

				
					sudo apt-get install mysql-server-8.0 mysql-workbench-community
				
			

更改資料庫目錄

先停止mysql 伺服器, 再將/var/lib/mysql整個目錄copy 到/data/server之下

				
					sudo /etc/init.d/mysql stop
sudo su
cd /var/lib/mysql
sudo mkdir -p /data/server
cd /data/server
sudo cp -r /var/lib/mysql .
sudo chown mysql:mysql -R mysql
				
			

然後必需設定寫入外部檔案的權限, 如下

				
					sudo vim /etc/apparmor.d/usr.sbin.mysqld



				
			
				
					# Allow data dir access
#  /var/lib/mysql/ r,
#  /var/lib/mysql/** rwk,
  /data/server/mysql/ r,
  /data/server/mysql/** rwk,
				
			

reload apparmor

				
					sudo /etc/init.d/apparmor reload 
				
			

然後更變mysql設定、檔效能調校、設定相容php7.2

				
					sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
				
			
				
					[mysqld]
pid-file  = /var/run/mysqld/mysqld.pid
socket    = /var/run/mysqld/mysqld.sock
datadir   = /var/lib/mysql#有換目錄要改一下
log-error = /var/log/mysql/error.log
default_authentication_plugin=mysql_native_password
character_set_server = utf8
datadir = /data/server/mysql
bind-address = 0.0.0.0
#緩衝區, 可大輻減少磁碟負載, 而且可加速查詢效能, 尤其是在select count(*)
innodb_buffer_pool_size = 2048M
#InnoDB的log buffer,通常設置為 64MB 就足夠了
innodb_log_buffer_size = 32M
#InnoDB redo log大小,通常設置256MB 就足夠了
innodb_log_file_size = 256M
#InnoDB redo log文件組,通常設置為 2 就足夠了
innodb_log_files_in_group = 2
#設置參數為1啟用InnoDB的獨立表空間模式,便於管理
innodb_file_per_table = 1
#啟用InnoDB的status file,便於管理員查看以及監控
innodb_status_file = 1
#當設置為0,該模式速度最快,但不太安全,mysqld進程的崩潰會導致上一秒鐘所有事務數據的丟失。
#當設置為1,該模式是最安全的,但也是最慢的一種方式。在mysqld 服務崩潰或者伺服器主機crash的情況下,binary log 只有可能丟失最多一個語句或者一個事務。
#當設置為2,該模式速度較快,也比0安全,只有在作業系統崩潰或者系統斷電的情況下,上一秒鐘所有事務數據才可能丟失。
innodb_flush_log_at_trx_commit = 1
#設置事務隔離級別為 READ-COMMITED,提高事務效率,通常都滿足事務一致性要求
transaction_isolation = READ-COMMITTED
#max_connections:所有的帳號所有客戶端並行連接到MYSQL服務最同時接受的最大並行連接數。
#max_user_connections : 針對某一個帳號並行連接到MYSQL服務的最大並行連接數。
#max_connect_errors:針對某一個IP主機連接中斷與mysql服務連接的次數,超過這個值,這個IP主機將會阻止從這個IP主機發送出>去的連接請求。遇到這種情況,需執行flush hosts。
#執行flush host或者 mysqladmin flush-hosts,其目的是為了清空host cache里的信息。可適當加大,防止頻繁連接錯誤後,前端host被mysql拒絕掉
#在 show global 里有個系統狀態Max_used_connections,它是指從這次mysql服務啟動到現在,同一時刻並行連接數的最大值。它不>是指當前的連接情況,而是一個比較值。如果在過去某一個時刻,MYSQL服務同時有10 00個請求連接過來,而之後再也沒有出現這麼>大的並發請求時,則Max_used_connections=1000.請注意與show variables 里的max_user_connections的區別。
#Max_used_connections / max_connections * 100% ≈ 85%
max_connections=600
max_connect_errors=1000
max_user_connections=400
#設置臨時表最大值,這是每次連接都會分配,不宜設置過大
#max_heap_table_size & tmp_table_size 要設置一樣大
max_heap_table_size = 100M
tmp_table_size = 100M
#每個連接都會分配的一些排序、連接等緩衝,一般設置為 2MB 就足夠了
sort_buffer_size = 2M
join_buffer_size = 2M
read_buffer_size = 2M
read_rnd_buffer_size = 2M
#建議關閉query cache,有些時候對性能反而是一種損害(8.0.30無效)
#query_cache_size = 0
#如果是以InnoDB引擎為主的DB,專用於MyISAM引擎的 key_buffer_size 可以設置較小,8MB 已足夠
#如果是以MyISAM引擎為主,可設置較大,但不能超過4G
#key_buffer_size = 8M(8.0.30預設定16M)
#設置慢查詢閥值,單位為秒
long_query_time = 120
slow_query_log=1
#開啟mysql慢sql的日誌 log_output=table,File #日誌輸出會寫表,也會寫日誌文件,為了便於程序去統計,所以最好寫表
slow_query_log_file=/data/log/slow.log
#快速預熱緩衝池
innodb_buffer_pool_dump_at_shutdown=1
innodb_buffer_pool_load_at_startup=1
#取消 binary logging
skip-log-bin

				
			
				
					sudo vim /etc/mysql/mysql.conf.d/mysql.cnf
				
			
				
					[mysql]
default-character-set = utf8
				
			
				
					sudo service mysql restart
				
			

安全的 MySQL 安裝 運行以下命令以保護 MySQL

				
					sudo mysql_secure_installation
				
			

按Enter。當提示輸入密碼時,設置 root 密碼。

				
					Enter current password for root (enter for none): <Enter password>
VALIDATE PASSWORD PLUGIN can be used to test passwords 
and improve security. It checks the strength of password 
and allows the users to set only those passwords which are 
secure enough. Would you like to setup VALIDATE PASSWORD plugin? 

Press y|Y for Yes, any other key for No: Y 

There are three levels of password validation policy: 

LOW    Length >= 8 
MEDIUM Length >= 8, numeric, mixed case, and special characters 
STRONG Length >= 8, numeric, mixed case, special characters and dictionary                  file 

Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 1 
Using existing password for root. 

Estimated strength of the password: 25  
Change the password for root ? ((Press y|Y for Yes, any other key for No) : d


Remove anonymous users? [Y/n] Y 
Disallow root login remotely? [Y/n] Y 
Remove test database and access to it? [Y/n] Y 
Reload privilege tables now? [Y/n] Y 
Thanks for using MariaDB!
				
			
檢查 MySQL 版本
				
					mysql -u root -p

				
			
				
					mysql> SELECT VERSION();
+-------------------------+
| VERSION()               |
+-------------------------+
| 8.0.25-0ubuntu0.20.04.1 |
+-------------------------+
1 row in set (0.00 sec)

				
			

創建 MySQL 用戶

				
					mysql>CREATE USER '帳號'@'%' IDENTIFIED BY '密碼';
mysql>GRANT ALL PRIVILEGES ON * . * TO '帳號'@'%'; 
mysql>FLUSH PRIVILEGES;
mysql>exit
				
			

然後要登入mysql 8.0 修改帳號使相容php

				
					mysql>ALTER USER '帳號'@'%' IDENTIFIED WITH mysql_native_password BY '密碼';
mysql>exit

				
			
				
					sudo service mysql restart
				
			

自動輸入密碼

sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf 最底下加入以下設定(僅限本機免密碼)

				
					[client]
password=YOUR_MYSQL_PASSWORD
				
			

備份還原檔案 使匯入匯出編碼一致,避免windows還原報錯ERROR 1064(42000)語法錯誤

				
					還原
mysql -u account -p --default-character-set=utf8 database < outputifle.sql
備份
mysqldump -u account -p --default-character-set=utf8 database > outputifle.sql