整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          MYSQL 入門全套

          源:www.cnblogs.com/aylin/p/5744312.html


          MySQL簡介

          1、什么是數據庫 ?

          數據庫(Database)是按照數據結構來組織、存儲和管理數據的倉庫,它產生于距今六十多年前,隨著信息技術和市場的發展,特別是二十世紀九十年代以后,數據管理不再僅僅是存儲和管理數據,而轉變成用戶所需要的各種數據管理的方式。數據庫有很多種類型,從最簡單的存儲有各種數據的表格到能夠進行海量數據存儲的大型數據庫系統都在各個方面得到了廣泛的應用。

          主流的數據庫有:sqlserver,mysql,Oracle、SQLite、Access、MS SQL Server等,本文主要講述的是mysql

          2、數據庫管理是干什么用的?

          • a. 將數據保存到文件或內存
          • b. 接收特定的命令,然后對文件進行相應的操作


          PS:如果有了以上管理系統,無須自己再去創建文件和文件夾,而是直接傳遞 命令 給上述軟件,讓其來進行文件操作,他們統稱為數據庫管理系統(DBMS,Database Management System)

          MySQL安裝

          MySQL是一種開放源代碼的關系型數據庫管理系統(RDBMS),MySQL數據庫系統使用最常用的數據庫管理語言–結構化查詢語言(SQL)進行數據庫管理。在 WEB 應用方面MySQL是最好的 RDBMS (Relational Database Management System,關系數據庫管理系統) 應用軟件之一。

          使用mysql必須具備一下條件

          • a. 安裝MySQL服務端
          • b. 安裝MySQL客戶端
          • c. 【客戶端】連接【服務端】
          • d. 【客戶端】發送命令給【服務端MySQL】服務的接受命令并執行相應操作(增刪改查等)


          1、下載地址:http://dev.mysql.com/downloads/mysql/

          2、安裝

          • windows安裝請參考:http://www.cnblogs.com/lonelywolfmoutain/p/4547115.html
          • linux下安裝:http://www.cnblogs.com/chenjunbiao/archive/2011/01/24/1940256.html


          注:以上兩個鏈接有完整的安裝方式,擼主也是參考他的安裝的,安裝完以后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;
          

          注:

          • 默認值,創建列時可以指定默認值,當插入數據時如果未主動設置,則自動添加默認值
          • 自增,如果為某列設置自增列,插入數據時無需設置此列,默認將自增(表中只能有一個自增列)注意:1、對于自增列,必須是索引(含主鍵)2、對于自增可以設置步長和起始值
          • 主鍵,一種特殊的唯一索引,不允許有空值,如果主鍵使用單個列,則它的值必須唯一,如果是多列,則其組合必須唯一。


          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元的某平臺內部的編程資料和一堆實用軟件。

          . 忘記root密碼

          編輯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服務

          2. skip-innodb 我們可以增加這個參數不使用innodb引擎。

          3. 配置慢查詢日志

          #log_slow_queries = /path/to/slow_queries

          #long_query_time = 1

          4. mysql常用操作

          查看都有哪些庫 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];

          5. mysql備份與恢復

          備份 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_PASSWORD

          此變量是必需變量,它指定將為MySQL root超級用戶設置的密碼。在上面的示例中,將其設置為my-secret-pw。

          • MYSQL_DATABASE

          該變量是可選的,并允許您指定要在映像啟動時創建的數據庫的名稱。如果提供了用戶名/密碼(請參閱下文),則將授予該用戶對該數據庫的超級用戶訪問權限(與相對應GRANT ALL)。

          • MYSQL_USER, MYSQL_PASSWORD

          這些變量是可選的,與創建新用戶和設置該用戶的密碼一起使用。將為該用戶授予該MYSQL_DATABASE變量指定的數據庫的超級用戶權限(請參見上文)。這兩個變量都是創建用戶所必需的。

          請注意,無需使用此機制來創建根超級用戶,該用戶默認情況下是使用MYSQL_ROOT_PASSWORD變量指定的密碼創建的。

          • MYSQL_ALLOW_EMPTY_PASSWORD

          這是一個可選變量。設置為非空值,例如yes,以允許使用root用戶的空白密碼啟動容器。注意:yes除非您真的知道自己在做什么,否則不建議將此變量設置為,因為這將使您的MySQL實例完全不受保護,從而使任何人都可以獲得完全的超級用戶訪問權限。

          • MYSQL_RANDOM_ROOT_PASSWORD

          這是一個可選變量。設置為非空值,例如yes,以為root用戶生成一個隨機的初始密碼(使用pwgen)。生成的root密碼將被打印到stdout(GENERATED ROOT PASSWORD: .....)。

          • MYSQL_ONETIME_PASSWORD

          初始化完成后,將root用戶(不是MYSQL_USER!中指定的用戶)設置為過期用戶,從而在首次登錄時強制更改密碼。任何非空值都將激活此設置。注意:僅MySQL 5.6+支持此功能。在MySQL 5.5上使用此選項將在初始化期間引發適當的錯誤。

          • MYSQL_INITDB_SKIP_TZINFO

          默認情況下,入口點腳本會自動加載該CONVERT_TZ()功能所需的時區數據。如果不需要,則任何非空值都將禁用時區加載。

          2.注意事項

          重要說明:有幾種方法可以存儲在Docker容器中運行的應用程序使用的數據。我們鼓勵mysql圖像用戶熟悉可用的選項,包括:

          • 讓Docker通過使用自己的內部卷管理將數據庫文件寫入主機系統上的磁盤,從而管理數據庫數據的存儲。這是默認設置,對用戶來說是簡單且相當透明的。不利之處在于,對于直接在主機系統(即外部容器)上運行的工具和應用程序而言,文件可能很難找到。
          • 在主機系統上(容器外部)創建一個數據目錄,并將其安裝到從容器內部可見的目錄中。這會將數據庫文件放置在主機系統上的已知位置,并使主機系統上的工具和應用程序易于訪問文件。缺點是用戶需要確保目錄存在,并且例如必須正確設置主機系統上的目錄權限和其他安全機制。



          三、部署環境說明:

          本文中使用本地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版本中的相關操作步驟。


          主站蜘蛛池模板: 国内精品无码一区二区三区| 无码人妻精品一区二区三| 亚洲日本一区二区三区在线不卡 | 亚洲乱色熟女一区二区三区丝袜| 国产在线精品一区二区在线观看 | 精品日韩一区二区| 亚洲一区二区三区日本久久九| 亚洲国产一区视频| 日韩一区二区在线免费观看| 韩国一区二区视频| 久久一区二区精品综合| 久久精品综合一区二区三区| 亚拍精品一区二区三区| 精品无码一区二区三区爱欲九九| 中文字幕久久亚洲一区| 国产免费一区二区三区不卡| 国产一区二区精品久久岳| 国产精品无码不卡一区二区三区| 精品女同一区二区| 高清一区高清二区视频| 免费一区二区无码视频在线播放| 波多野结衣在线观看一区二区三区 | 日本精品一区二区久久久| 国产精品一区二区资源| 国产高清视频一区二区| 波霸影院一区二区| 一区二区三区视频在线播放| 精品国产毛片一区二区无码| 日韩精品无码一区二区三区AV| 亲子乱av一区二区三区| 久久国产一区二区| 国产短视频精品一区二区三区| 精产国品一区二区三产区| 天堂va视频一区二区| 日本一区二区三区在线视频观看免费 | 久久国产精品免费一区| 国产一区二区三区高清在线观看 | 无码av免费一区二区三区试看| 亚洲一区在线免费观看| 国产一区美女视频| 另类免费视频一区二区在线观看|