源:www.cnblogs.com/aylin/p/5744312.html
MySQL簡介
1、什么是數據庫 ?
數據庫(Database)是按照數據結構來組織、存儲和管理數據的倉庫,它產生于距今六十多年前,隨著信息技術和市場的發展,特別是二十世紀九十年代以后,數據管理不再僅僅是存儲和管理數據,而轉變成用戶所需要的各種數據管理的方式。數據庫有很多種類型,從最簡單的存儲有各種數據的表格到能夠進行海量數據存儲的大型數據庫系統都在各個方面得到了廣泛的應用。
主流的數據庫有:sqlserver,mysql,Oracle、SQLite、Access、MS SQL Server等,本文主要講述的是mysql
2、數據庫管理是干什么用的?
PS:如果有了以上管理系統,無須自己再去創建文件和文件夾,而是直接傳遞 命令 給上述軟件,讓其來進行文件操作,他們統稱為數據庫管理系統(DBMS,Database Management System)
MySQL安裝
MySQL是一種開放源代碼的關系型數據庫管理系統(RDBMS),MySQL數據庫系統使用最常用的數據庫管理語言–結構化查詢語言(SQL)進行數據庫管理。在 WEB 應用方面MySQL是最好的 RDBMS (Relational Database Management System,關系數據庫管理系統) 應用軟件之一。
使用mysql必須具備一下條件
1、下載地址:http://dev.mysql.com/downloads/mysql/
2、安裝
注:以上兩個鏈接有完整的安裝方式,擼主也是參考他的安裝的,安裝完以后mysql.server start啟動mysql服務
MySQL操作
一、連接數據庫
mysql -u user -p 例:mysql -u root -p
常見錯誤如下:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2), it means that the MySQL server daemon (Unix) or service (Windows) is not running.
退出連接:
QUIT 或者 Ctrl+D
二、查看數據庫,創建數據庫,使用數據庫查看數據庫:
show databases;
默認數據庫:
mysql - 用戶權限相關數據 test - 用于用戶測試數據 information_schema - MySQL本身架構相關數據
創建數據庫:
create database db1 DEFAULT CHARSET utf8 COLLATE utf8_general_ci; # utf8編碼 create database db1 DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci; # gbk編碼
使用數據庫:
use db1;
顯示當前使用的數據庫中所有表:
SHOW TABLES;
三、用戶管理
創建用戶
create user '用戶名'@'IP地址' identified by '密碼';
刪除用戶
drop user '用戶名'@'IP地址';
修改用戶
rename user '用戶名'@'IP地址'; to '新用戶名'@'IP地址';
修改密碼
set password for '用戶名'@'IP地址' = Password('新密碼');
注:用戶權限相關數據保存在mysql數據庫的user表中,所以也可以直接對其進行操作(不建議)
四、權限管理
mysql對于權限這塊有以下限制:
all privileges:除grant外的所有權限 select:僅查權限 select,insert:查和插入權限 ... usage:無訪問權限 alter:使用alter table alter routine:使用alter procedure和drop procedure create:使用create table create routine:使用create procedure create temporary tables:使用create temporary tables create user:使用create user、drop user、rename user和revoke all privileges create view:使用create view delete:使用delete drop:使用drop table execute:使用call和存儲過程 file:使用select into outfile 和 load data infile grant option:使用grant 和 revoke index:使用index insert:使用insert lock tables:使用lock table process:使用show full processlist select:使用select show databases:使用show databases show view:使用show view update:使用update reload:使用flush shutdown:使用mysqladmin shutdown(關閉MySQL) super:使用change master、kill、logs、purge、master和set global。還允許mysqladmin調試登陸 replication client:服務器位置的訪問 replication slave:由復制從屬使用
對于數據庫及內部其他權限如下:
數據庫名.* 數據庫中的所有 數據庫名.表 指定數據庫中的某張表 數據庫名.存儲過程 指定數據庫中的存儲過程 *.* 所有數據庫
對于用戶和IP的權限如下:
用戶名@IP地址 用戶只能在改IP下才能訪問 用戶名@192.168.1.% 用戶只能在改IP段下才能訪問(通配符%表示任意) 用戶名@% 用戶可以再任意IP下訪問(默認IP地址為%)
1、查看權限:
show grants for '用戶'@'IP地址'
2、授權
grant 權限 on 數據庫.表 to '用戶'@'IP地址'
3、取消授權
revoke 權限 on 數據庫.表 from '用戶名'@'IP地址'
授權實例如下:
grant all privileges on db1.tb1 TO '用戶名'@'IP' grant select on db1.* TO '用戶名'@'IP' grant select,insert on *.* TO '用戶名'@'IP' revoke select on db1.tb1 from '用戶名'@'IP'
MySQL表操作
1、查看表
show tables; # 查看數據庫全部表 select * from 表名; # 查看表所有內容
2、創建表
create table 表名( 列名 類型 是否可以為空, 列名 類型 是否可以為空 )ENGINE=InnoDB DEFAULT CHARSET=utf8
來一個實例好詳解
CREATE TABLE `tab1` ( `nid` int(11) NOT NULL auto_increment, `name` varchar(255) DEFAULT zhangyanlin, `email` varchar(255), PRIMARY KEY (`nid`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
注:
3、刪除表
drop table 表名
4、清空表內容
delete from 表名 truncate table 表名
5、修改表
添加列: alter table 表名 add 列名 類型 刪除列: alter table 表名 drop column 列名 修改列: alter table 表名 modify column 列名 類型; -- 類型 alter table 表名 change 原列名 新列名 類型; -- 列名,類型 添加主鍵: alter table 表名 add primary key(列名); 刪除主鍵: alter table 表名 drop primary key; alter table 表名 modify 列名 int, drop primary key; 添加外鍵: alter table 從表 add constraint 外鍵名稱(形如:FK_從表_主表) foreign key 從表(外鍵字段) references 主表(主鍵字段); 刪除外鍵: alter table 表名 drop foreign key 外鍵名稱 修改默認值: ALTER TABLE testalter_tbl ALTER i SET DEFAULT 1000; 刪除默認值: ALTER TABLE testalter_tbl ALTER i DROP DEFAULT;
對于上述這些操作是不是看起來很麻煩,很浪費時間,別慌!有專門的軟件能提供這些功能,操作起來非常簡單,這個軟件名字叫Navicat Premium ,大家自行在網上下載,練練手,但是下面的即將講到表內容操作還是建議自己寫命令來進行
6、基本數據類型
MySQL的數據類型大致分為:數值、時間和字符串
bit[(M)] 二進制位(101001),m表示二進制位的長度(1-64),默認m=1 tinyint[(m)] [unsigned] [zerofill] 小整數,數據類型用于保存一些范圍的整數數值范圍: 有符號: -128 ~ 127. 無符號: 0 ~ 255 特別的: MySQL中無布爾值,使用tinyint(1)構造。 int[(m)][unsigned][zerofill] 整數,數據類型用于保存一些范圍的整數數值范圍: 有符號: -2147483648 ~ 2147483647 無符號: 0 ~ 4294967295 特別的:整數類型中的m僅用于顯示,對存儲范圍無限制。例如: int(5),當插入數據2時,select 時數據顯示為:00002 bigint[(m)][unsigned][zerofill] 大整數,數據類型用于保存一些范圍的整數數值范圍: 有符號: -9223372036854775808 ~ 9223372036854775807 無符號: 0 ~ 18446744073709551615 decimal[(m[,d])] [unsigned] [zerofill] 準確的小數值,m是數字總個數(負號不算),d是小數點后個數。 m最大值為65,d最大值為30。 特別的:對于精確數值計算時需要用此類型 decaimal能夠存儲精確值的原因在于其內部按照字符串存儲。 FLOAT[(M,D)] [UNSIGNED] [ZEROFILL] 單精度浮點數(非準確小數值),m是數字總個數,d是小數點后個數。 無符號: -3.402823466E+38 to -1.175494351E-38, 0 1.175494351E-38 to 3.402823466E+38 有符號: 0 1.175494351E-38 to 3.402823466E+38 **** 數值越大,越不準確 **** DOUBLE[(M,D)] [UNSIGNED] [ZEROFILL] 雙精度浮點數(非準確小數值),m是數字總個數,d是小數點后個數。 無符號: -1.7976931348623157E+308 to -2.2250738585072014E-308 0 2.2250738585072014E-308 to 1.7976931348623157E+308 有符號: 0 2.2250738585072014E-308 to 1.7976931348623157E+308 **** 數值越大,越不準確 **** char (m) char數據類型用于表示固定長度的字符串,可以包含最多達255個字符。其中m代表字符串的長度。 PS: 即使數據小于m長度,也會占用m長度 varchar(m) varchars數據類型用于變長的字符串,可以包含最多達255個字符。其中m代表該數據類型所允許保存的字符串的最大長度,只要長度小于該最大值的字符串都可以被保存在該數據類型中。 注:雖然varchar使用起來較為靈活,但是從整個系統的性能角度來說,char數據類型的處理速度更快,有時甚至可以超出varchar處理速度的50%。因此,用戶在設計數據庫時應當綜合考慮各方面的因素,以求達到最佳的平衡 text text數據類型用于保存變長的大字符串,可以組多到65535 (2**16 ? 1)個字符。 mediumtext A TEXT column with a maximum length of 16,777,215 (2**24 ? 1) characters. longtext A TEXT column with a maximum length of 4,294,967,295 or 4GB (2**32 ? 1) characters. enum 枚舉類型, An ENUM column can have a maximum of 65,535 distinct elements. (The practical limit is less than 3000.) 示例: CREATE TABLE shirts ( name VARCHAR(40), size ENUM('x-small', 'small', 'medium', 'large', 'x-large') ); INSERT INTO shirts (name, size) VALUES ('dress shirt','large'), ('t-shirt','medium'),('polo shirt','small'); set 集合類型 A SET column can have a maximum of 64 distinct members. 示例: CREATE TABLE myset (col SET('a', 'b', 'c', 'd')); INSERT INTO myset (col) VALUES ('a,d'), ('d,a'), ('a,d,a'), ('a,d,d'), ('d,a,d'); DATE YYYY-MM-DD(1000-01-01/9999-12-31) TIME HH:MM:SS('-838:59:59'/'838:59:59') YEAR YYYY(1901/2155) DATETIME YYYY-MM-DD HH:MM:SS(1000-01-01 00:00:00/9999-12-31 23:59:59 Y) TIMESTAMP YYYYMMDD HHMMSS(1970-01-01 00:00:00/2037 年某時)
MySQL表內容操作
表內容操作無非就是增刪改查,當然用的最多的還是查,而且查這一塊東西最多,用起來最難,當然對于大神來說那就是so easy了,對于我這種小白還是非常難以靈活運用的,下面咱來一一操作一下
1、增
insert into 表 (列名,列名...) values (值,值,...) insert into 表 (列名,列名...) values (值,值,...),(值,值,值...) insert into 表 (列名,列名...) select (列名,列名...) from 表 例: insert into tab1(name,email) values('zhangyanlin','zhangyanlin8851@163.com')
2、刪
delete from 表 # 刪除表里全部數據 delete from 表 where id=1 and name='zhangyanlin' # 刪除ID =1 和name='zhangyanlin' 那一行數據
3、改
update 表 set name = 'zhangyanlin' where id>1
4、查
select * from 表 select * from 表 where id > 1 select nid,name,gender as gg from 表 where id > 1
查這塊的條件太多太多我給列舉出來至于組合還得看大家的理解程度哈
a、條件判斷where
select * from 表 where id > 1 and name != 'aylin' and num = 12; select * from 表 where id between 5 and 16; select * from 表 where id in (11,22,33) select * from 表 where id not in (11,22,33) select * from 表 where id in (select nid from 表)
b、通配符like
select * from 表 where name like 'zhang%' # zhang開頭的所有(多個字符串) select * from 表 where name like 'zhang_' # zhang開頭的所有(一個字符)
c、限制limit
select * from 表 limit 5; - 前5行 select * from 表 limit 4,5; - 從第4行開始的5行 select * from 表 limit 5 offset 4 - 從第4行開始的5行
d、排序asc,desc
select * from 表 order by 列 asc - 根據 “列” 從小到大排列 select * from 表 order by 列 desc - 根據 “列” 從大到小排列 select * from 表 order by 列1 desc,列2 asc - 根據 “列1” 從大到小排列,如果相同則按列2從小到大排序
e、分組group by
select num from 表 group by num select num,nid from 表 group by num,nid select num,nid from 表 where nid > 10 group by num,nid order nid desc select num,nid,count(*),sum(score),max(score),min(score) from 表 group by num,nid select num from 表 group by num having max(id) > 10 特別的:group by 必須在where之后,order by之前
關注頭條號 程序員喬戈里 關注以后私信我,送你一份價值19889元的某平臺內部的編程資料和一堆實用軟件。
編輯mysql主配置文件 my.cnf 在[mysqld]字段下添加參數 skip-grant ,重啟數據庫服務,這樣就可以進入數據庫不用授權了 mysql -uroot ,修改相應用戶密碼 use mysql; update user set password=password('your password') where user='root';flush privileges; 最后修改/etc/my.cnf 去掉 skip-grant , 重啟mysql服務
#log_slow_queries = /path/to/slow_queries
#long_query_time = 1
查看都有哪些庫 show databases;
查看某個庫的表 use db; show tables;
查看表的字段 desc tb;
查看建表語句 show create table tb;
當前是哪個用戶 select user();
當前庫 select database();
創建庫 create database db1;
創建表 create table t1 (`id` int(4), `name` char(40));
查看數據庫版本 select version();
查看mysql狀態 show status;
修改mysql參數 show variables like 'max_connect%'; set global max_connect_errors = 1000;
查看mysql隊列 show processlist;
創建普通用戶并授權 grant all on *.* to user1 identified by '123456';
grant all on db1.* to 'user2'@'10.0.2.100' identified by '111222';
grant all on db1.* to 'user3'@'%' identified by '231222';insert into tb1 (id,name) values(1,'aming');
更改密碼 UPDATE mysql.user SET password=PASSWORD("newpwd") WHERE user='username' ;
查詢 select count(*) from mysql.user; select * from mysql.db; select * from mysql.db where host like '10.0.%';
插入 update db1.t1 set name='aaa' where id=1;
清空表 truncate table db1.t1;
刪除表 drop table db1.t1;
刪除數據庫 drop database db1;
修復表 repair table tb1 [use frm];
備份 mysqldump -uroot -p db >1.sql
恢復 mysql -uroot -p db <1.sql
只備份一個表 mysqldump -uroot -p db tb1 > 2.sql
備份時指定字符集 mysqldump -uroot -p --default-character-set=utf8 db >1.sql
恢復也指定字符集 mysql -uroot -p --default-character-set=utf8 db < 1.sql
擴展知識:
myisam 和innodb引擎對比 http://www.pureweber.com/article/myisam-vs-innodb/
一臺mysql服務器啟動多個端口 http://www.lishiming.net/thread-63-1-1.html
SQL語句教程 http://blog.51cto.com/zt/206
sql教程pdf文檔 http://class.ccshu.net/00864091/ ... %95%99%E7%A8%8B.pdf
什么是事務?事務的特性有哪些? http://blog.csdn.net/yenange/article/details/7556094
mysql常用引擎 http://c.biancheng.net/cpp/html/1465.html
批量更改表的引擎 http://www.361way.com/change-mysql-engine/1729.html
mysql 二進制日志binlog的模式 http://lihuipeng.blog.51cto.com/3064864/833017
mysql根據binlog恢復指定時間段的數據 http://www.centoscn.com/mysql/2015/0204/4630.html
mysql字符集調整 http://xjsunjie.blog.51cto.com/999372/1355013
使用xtrabackup備份innodb引擎的數據庫 http://www.aminglinux.com/bbs/thread-956-1-1.html
innobackupex 備份 Xtrabackup 增量備份 http://www.aminglinux.com/bbs/thread-1012-1-1.html
、概述
MySQL是世界上最受歡迎的開源數據庫。憑借其經過驗證的性能,可靠性和易用性,MySQL已成為基于Web的應用程序的領先數據庫選擇,涵蓋了從個人項目和網站到電子商務和信息服務的所有范圍,一直到備受矚目。
官方倉庫鏡像:https://hub.docker.com/_/mysql
二、鏡像說明
1.環境變量
啟動mysql映像時,可以通過在docker run命令行上傳遞一個或多個環境變量來調整MySQL實例的配置。請注意,如果使用已包含數據庫的數據目錄啟動容器,則以下任何變量都將無效:容器啟動時,任何現有數據庫都將保持不變。
另請參閱https://dev.mysql.com/doc/refman/5.7/en/environment-variables.html,以獲取MySQL本身尊重的環境變量的文檔(尤其是類似的變量MYSQL_HOST,該變量在與該映像一起使用時會引起問題) )。
此變量是必需變量,它指定將為MySQL root超級用戶設置的密碼。在上面的示例中,將其設置為my-secret-pw。
該變量是可選的,并允許您指定要在映像啟動時創建的數據庫的名稱。如果提供了用戶名/密碼(請參閱下文),則將授予該用戶對該數據庫的超級用戶訪問權限(與相對應GRANT ALL)。
這些變量是可選的,與創建新用戶和設置該用戶的密碼一起使用。將為該用戶授予該MYSQL_DATABASE變量指定的數據庫的超級用戶權限(請參見上文)。這兩個變量都是創建用戶所必需的。
請注意,無需使用此機制來創建根超級用戶,該用戶默認情況下是使用MYSQL_ROOT_PASSWORD變量指定的密碼創建的。
這是一個可選變量。設置為非空值,例如yes,以允許使用root用戶的空白密碼啟動容器。注意:yes除非您真的知道自己在做什么,否則不建議將此變量設置為,因為這將使您的MySQL實例完全不受保護,從而使任何人都可以獲得完全的超級用戶訪問權限。
這是一個可選變量。設置為非空值,例如yes,以為root用戶生成一個隨機的初始密碼(使用pwgen)。生成的root密碼將被打印到stdout(GENERATED ROOT PASSWORD: .....)。
初始化完成后,將root用戶(不是MYSQL_USER!中指定的用戶)設置為過期用戶,從而在首次登錄時強制更改密碼。任何非空值都將激活此設置。注意:僅MySQL 5.6+支持此功能。在MySQL 5.5上使用此選項將在初始化期間引發適當的錯誤。
默認情況下,入口點腳本會自動加載該CONVERT_TZ()功能所需的時區數據。如果不需要,則任何非空值都將禁用時區加載。
2.注意事項
重要說明:有幾種方法可以存儲在Docker容器中運行的應用程序使用的數據。我們鼓勵mysql圖像用戶熟悉可用的選項,包括:
三、部署環境說明:
本文中使用本地VM虛機部署測試。
OS:CentOS Linux release 7.6.1810 (Core) 3.10.0-957.el7.x86_64
IP:192.168.168.100
Docker Version:v20.10.6
虛機配置:2核CPU、4G內存
注:①系統為最小化安裝,部署前已完成系統初始化、內核及安全優化;
②Docker已安裝。
四、部署MySQL-v5.7.34
1.拉取鏡像
docker pull mysql:5.7.34
注:tag為5.7、5的目前(2021年04月25日前)都是5.7.34版本。
2.使用鏡像構建MySQL容器
## 創建數據目錄,用于掛載,實現數據持久化
mkdir -p /data/mysql
## 創建MySQL用戶組、用戶及修改掛載目錄權限,防止容器啟動時出現目錄權限問題,用戶組及用戶MySQL是鏡像內MySQL目錄的屬主和屬組。也可不創建用戶組及用戶,修改宿主機用于掛載的目錄權限為777即可。
groupadd -r mysql
useradd -g mysql -r -s /sbin/nologin -M -d /data/mysql mysql
chown -R mysql.mysql /data/mysql
chmod -R 0700 /data/mysql
## 創建配置文件,掛載替換容器內的配置文件,方便后續優化。
mkdir -p /etc/mysql
vi /etc/mysql/my.cnf
//輸入以下配置內容
[client]
port = 3306
socket = /var/lib/mysql/mysql.sock
default-character-set = utf8mb4
[mysqld]
port = 3306
socket = /var/lib/mysql/mysql.sock
datadir = /var/lib/mysql
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci
init_connect = 'SET NAMES utf8mb4'
server-id = 1
log-slave-updates=true
skip-external-locking
skip-name-resolve
back_log = 300
table_open_cache = 128
max_allowed_packet = 16M
read_buffer_size = 8M
read_rnd_buffer_size = 64M
sort_buffer_size = 16M
join_buffer_size = 8M
key_buffer_size = 128M
thread_cache_size = 16
log-bin = mysql-bin
binlog_format = row
######主從
log-slave-updates = true
######慢日志
slow_query_log = on
long_query_time = 1
slow_query_log_file = /var/lib/mysql/db-slow.log
gtid_mode = ON
enforce_gtid_consistency = ON
expire_logs_days = 7
default_storage_engine = InnoDB
innodb_buffer_pool_size = 1G
innodb_data_file_path = ibdata1:10M:autoextend
innodb_file_per_table = on
innodb_write_io_threads = 4
innodb_read_io_threads = 4
innodb_thread_concurrency = 8
innodb_purge_threads = 1
innodb_flush_log_at_trx_commit = 1
innodb_log_buffer_size = 8M
innodb_log_file_size = 512M
innodb_log_files_in_group = 3
innodb_max_dirty_pages_pct = 90
innodb_lock_wait_timeout = 60
max_connections = 5000
interactive_timeout = 28800
wait_timeout = 28800
sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
symbolic-links=0
[mysqldump]
quick
max_allowed_packet = 32M
[mysql]
no-auto-rehash
default-character-set = utf8mb4
[myisamchk]
key_buffer_size = 64M
sort_buffer_size = 64M
read_buffer = 8M
write_buffer = 8M
[mysqlhotcopy]
interactive-timeout
[mysqld_safe]
log-error = /var/lib/mysql/mysql_err.log
pid-file = /var/lib/mysql/mysqld.pid
備注:請根據實際環境需求修改參數,此處配置僅供參考。
## 構建容器
docker run -d --restart=always --name MySQL57 -p 3306:3306 \
-v /etc/localtime:/etc/localtime \
-v /data/mysql:/var/lib/mysql \
-v /etc/mysql:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=123456 mysql:5.7.34
部分參數說明:
-p 3306:3306:將容器的 3306 端口映射到主機的 3306 端口。
-v /data/mysql:/var/lib/mysql :掛載數據目錄,實現數據持久化。
-e MYSQL_ROOT_PASSWORD=123456 :初始化 root 用戶的密碼。
3.查看容器
docker ps -a
4.工具遠程連接
本文中使用Navicat工具連接。構建容器時映射的端口防火墻默認已放開。
## Navicat新建MySQL連接
## 點擊“測試連接”
## 連接成功如下圖所示,即可在Navicat工具上進行創建\刪除用戶、數據庫等其他操作,無需進入容器操作。
5.容器內相關操作
## 進入容器
docker exec -it MySQL57 /bin/bash
## 登錄MySQL操作
mysql -uroot -p //輸入密碼登錄MySQL
## 查看數據庫
show databases;
## 查看用戶
select user,host from mysql.user;
五、部署MySQL-v8.0.24
1.拉取鏡像
docker pull mysql:8.0.24
注:tag為latest、8.0、8的目前(2021年04月28日前)都是8.0.24版本。
2.使用鏡像構建MySQL容器
## 創建數據目錄,用于掛載,實現數據持久化
注意:新版需要掛載 /var/lib/mysql-files/ 目錄,否則無法啟動容器。
mkdir -p /data/mysql/{data,mysql-files}
## 創建MySQL用戶組、用戶及修改掛載目錄權限,防止容器啟動時出現目錄權限問題,用戶組及用戶MySQL是鏡像內MySQL目錄的屬主和屬組。也可不創建用戶組及用戶,修改宿主機用于掛載的目錄權限為777即可。
groupadd -r mysql
useradd -g mysql -r -s /sbin/nologin -M -d /data/mysql mysql
chown -R mysql.mysql /data/mysql
chmod -R 0700 /data/mysql
## 創建配置文件,掛載替換容器內的配置文件,方便后續優化。
mkdir -p /etc/mysql
vi /etc/mysql/mysql8.cnf
//輸入以下配置內容
[client]
port = 3306
socket = /var/lib/mysql/mysql.sock
default-character-set=utf8mb4
[mysqld]
port = 3306
user = mysql
socket = /var/lib/mysql/mysql.sock
datadir = /var/lib/mysql
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci
init_connect = 'SET NAMES utf8mb4'
lower_case_table_names = 1
skip-external-locking
skip-name-resolve
server-id = 1
transaction_isolation = REPEATABLE-READ
explicit_defaults_for_timestamp = true
thread_stack = 512K
external-locking = FALSE
gtid_mode = ON
enforce_gtid_consistency = ON
##最大連接數
max_connections=5000
max_connect_errors = 1000
back_log = 300
##二進制日志
log-bin = /var/lib/mysql/mysql-bin
binlog_format = ROW
binlog_row_image = FULL
binlog_expire_logs_seconds = 0
binlog_cache_size=16M
max_binlog_cache_size=1G
max_binlog_size=512M
sync_binlog = 1
##慢日志
slow_query_log = on
slow_query_log_file = /var/lib/mysql/db-slow.log
long_query_time = 1
log_slow_admin_statements = 1
#作為從庫時生效
log_slow_slave_statements = 1
log-queries-not-using-indexes=0
log_throttle_queries_not_using_indexes=60
##緩沖區
table_open_cache = 600
table_definition_cache = 700
table_open_cache_instances = 64
max_allowed_packet = 32M
sort_buffer_size = 16M
join_buffer_size = 8M
tmp_table_size = 64M
max_heap_table_size = 64M
##對MyISAM表起作用
key_buffer_size = 128M
read_buffer_size = 8M
read_rnd_buffer_size = 32M
bulk_insert_buffer_size = 64M
thread_cache_size = 16
##主從復制配置
log_slave_updates=1
relay-log = /var/lib/mysql
master-info-repository=TABLE
relay-log-info-repository=TABLE
relay-log-recovery=on
##innodb性能設置
default_storage_engine = InnoDB
innodb_thread_concurrency = 0
innodb_buffer_pool_size = 1G
innodb_buffer_pool_instances = 8
innodb_buffer_pool_load_at_startup = 1
innodb_buffer_pool_dump_at_shutdown = 1
innodb_data_file_path = ibdata1:10M:autoextend
innodb_log_buffer_size = 16M
innodb_log_files_in_group = 3
innodb_log_file_size = 512M
innodb_undo_log_truncate = 1
innodb_max_undo_log_size = 4G
#innodb_undo_directory = /var/lib/mysql/undolog
##CPU多核處理能力設置,假設CPU是2顆8核的,設置如下
innodb_write_io_threads = 8
innodb_read_io_threads = 8
innodb_purge_threads = 4
innodb_page_cleaners = 4
innodb_open_files = 65535
innodb_max_dirty_pages_pct = 50
#innodb_flush_method = O_DIRECT
innodb_lock_wait_timeout = 60
innodb_rollback_on_timeout = 1
innodb_print_all_deadlocks = 1
innodb_autoinc_lock_mode = 1
innodb_file_per_table = on
innodb_flush_log_at_trx_commit = 1
##設置時區
default_time_zone = "+8:00"
##超時時間
interactive_timeout = 3600
wait_timeout = 3600
##默認使用“mysql_native_password”插件認證
#default_authentication_plugin = mysql_native_password
[mysqldump]
quick
max_allowed_packet = 64M
[mysql]
no-auto-rehash
default-character-set = utf8mb4
[myisamchk]
key_buffer_size = 64M
sort_buffer_size = 64M
read_buffer = 8M
write_buffer = 8M
[mysqlhotcopy]
interactive-timeout
[mysqld_safe]
log-error = /var/lib/mysql/mysql_err.log
pid-file = /var/lib/mysql/mysqld.pid
備注:請根據實際環境需求修改參數,此處配置僅供參考。
鏡像內默認配置文件是 /etc/mysql/my.cnf 文件。如果想要自定義配置,建議向 /etc/mysql/conf.d 目錄中創建 .cnf 文件。新建的文件可以任意起名,只要保證后綴名是 .cnf 即可。新建的文件中的配置項可以覆蓋 /etc/mysql/my.cnf 中的配置項。 當然也可以向 /etc/mysql 目錄中掛載在宿主機上創建的 my.cnf 文件,直接覆蓋所有默認配置文件。
## 構建容器
docker run -d --restart=always --name MySQL8 -p 3306:3306 \
-v /etc/localtime:/etc/localtime \
-v /data/mysql/data:/var/lib/mysql \
-v /data/mysql/mysql-files:/var/lib/mysql-files \
-v /etc/mysql:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=123456 mysql:8.0.24
部分參數說明:
-p 3306:3306:將容器的 3306 端口映射到主機的 3306 端口。
-v /data/mysql/data:/var/lib/mysql :掛載數據目錄,實現數據持久化。
-e MYSQL_ROOT_PASSWORD=123456 :初始化 root 用戶的密碼。
3.查看容器
docker ps -a
4.配置遠程操作權限
Navicat等工具遠程連接MySQL不支持caching_sha2_password加密方法,需修改為 mysql_native_password 加密方式并重置密碼。
## 進入容器
docker exec -it MySQL8 /bin/bash
## 登錄MySQL操作
mysql -uroot -p
//輸入密碼123456進入數據庫
mysql> use mysql;
mysql> alter user 'root'@'%' identified by '123456' password expire never;
mysql> alter user 'root'@'%' identified with mysql_native_password by '123456';
mysql> flush privileges;
5.工具遠程連接
請參考5.7版本中的相關操作步驟。
*請認真填寫需求信息,我們會在24小時內與您取得聯系。