1. 安裝 Docker-compose
curl -L "https://github.com/docker/compose/releases/download/v2.17.2/docker-compose-\$(uname -s)-\$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
2.拉取映象
docker pull registry.cn-hangzhou.aliyuncs.com/ns-2023/lib-2023:mysql-5.7
3. 配置檔案 my.conf
[mysqld]
user=mysql # MySQL啟動使用者
default-storage-engine=INNODB # 建立新表時將使用的預設儲存引擎
character-set-server=utf8mb4 # 設定mysql服務端預設字符集
pid-file = /var/run/mysqld/mysqld.pid # pid檔案所在目錄
socket = /var/run/mysqld/mysqld.sock # 用於本地連線的socket套接字
datadir = /var/lib/mysql # 資料檔案存放的目錄
#log-error = /var/log/mysql/error.log
#bind-address = 127.0.0.1 # MySQL繫結IP
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION # 定義mysql應該支援的sql語法,資料校驗等!
# 允許最大連線數
max_connections=200
# ================= ↓↓↓ mysql主從同步配置start ↓↓↓ =================
# 同一區域網內注意要唯一
server-id=3306
# 開啟二進位制日誌功能 & 日誌位置存放位置`/var/lib/mysql`
#log-bin=mysql-bin
log-bin=/var/lib/mysql/mysql-bin
# binlog格式
# 1. STATEMENT:基於SQL語句的模式,binlog 資料量小,但是某些語句和函式在複製過程可能導致資料不一致甚至出錯;
# 2. MIXED:混合模式,根據語句來選用是 STATEMENT 還是 ROW 模式;
# 3. ROW:基於行的模式,記錄的是行的完整變化。安全,但 binlog 會比其他兩種模式大很多;
binlog_format=ROW
# FULL:binlog記錄每一行的完整變更 MINIMAL:只記錄影響後的行
binlog_row_image=FULL
# 日誌檔案大小
# max_binlog_size=1G
max_binlog_size=100M
# 定義清除過期日誌的時間(這裡設定為7天)
expire_logs_days=7
# ================= ↑↑↑ mysql主從同步配置end ↑↑↑ =================
[mysql]
default-character-set=utf8mb4
[client]
default-character-set=utf8mb4 # 設定mysql客戶端預設字符集
4. docker-compose.yml
version: "3"
services:
mysql:
image: registry.cn-hangzhou.aliyuncs.com/ns-2023/lib-2023:mysql-5.7 # 原映象`mysql:5.7`
container_name: mysql_3306 # 容器名為'mysql_3306'
restart: unless-stopped # 指定容器退出後的重啟策略為始終重啟,但是不考慮在Docker守護程序啟動時就已經停止了的容器
volumes: # 資料卷掛載路徑設定,將本機目錄對映到容器目錄
- "./mysql/my.cnf:/etc/mysql/my.cnf"
- "./mysql/data:/var/lib/mysql"
# - "./mysql/conf.d:/etc/mysql/conf.d"
- "./mysql/log/mysql/error.log:/var/log/mysql/error.log"
- "./mysql/docker-entrypoint-initdb.d:/docker-entrypoint-initdb.d" # 可執行初始化sql指令碼的目錄 -- tips:`/var/lib/mysql`目錄下無資料的時候才會執行(即第一次啟動的時候才會執行)
environment: # 設定環境變數,相當於docker run命令中的-e
TZ: Asia/Shanghai
LANG: en_US.UTF-8
MYSQL_ROOT_PASSWORD: root # 設定root使用者密碼
MYSQL_DATABASE: demo # 初始化的資料庫名稱
ports: # 對映埠
- "3306:3306"
mysql/docker-entrypoint-initdb.d/init.sql
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
create database zq;
SET FOREIGN_KEY_CHECKS = 1;
5. 執行
docker-compose -f docker-compose.yml -p mysql57 up -d
docker exec -it mysql_3306 /bin/bash
mysql -uroot -proot