Docker配置MySql環(huán)境的實現(xiàn)步驟
一、簡單安裝
1. 首先從Docker Hub中拉取鏡像
這里我要安裝的是mysql8版本。
docker pull mysql:8.0.27
2. 啟動嘗試創(chuàng)建MySQL容器,并設置掛載卷。
docker run -p 3306:3306 \ --name mysql8 \ --privileged=true \ -v /app/mysql8/log:/var/log/mysql \ -v /app/mysql8/data:/var/lib/mysql \ -v /app/mysql8/conf:/etc/mysql/conf.d \ -v /app/mysql8/files:/var/lib/mysql-files \ -e MYSQL_ROOT_PASSWORD=123456 \ -d mysql:8.0.27
--name mysql8
: 為容器指定一個名稱,這里是mysql8
--privileged=true
: 賦予容器更多的權(quán)限。在一般情況下,盡量避免使用--privileged
,因為它會賦予容器更多的權(quán)限,可能會帶來一些安全風險。-v /app/mysql8/log:/var/log/mysql
: 將主機上的/app/mysql8/log
目錄映射到容器內(nèi)的/var/log/mysql
,用于存儲MySQL的日志文件。-v /app/mysql8/data:/var/lib/mysql
: 將主機上的/app/mysql8/data
目錄映射到容器內(nèi)的/var/lib/mysql
,用于持久化存儲MySQL的數(shù)據(jù)。-v /app/mysql8/conf:/etc/mysql/conf.d
: 將主機上的/app/mysql8/conf
目錄映射到容器內(nèi)的/etc/mysql/conf.d
,用于提供自定義的MySQL配置文件。-v /app/mysql8/files:/var/lib/mysql-files
: 將主機上的/app/mysql8/files
目錄映射到容器內(nèi)的/var/lib/mysql-files
,用于存儲MySQL的文件。-e MYSQL_ROOT_PASSWORD=123456
: 設置MySQL root用戶的密碼為123456
。-d
: 后臺運行容器。
3. 查看mysql8這個容器是否啟動成功
docker ps
4. 如果已經(jīng)成功啟動,進入容器中簡單測試
4.1 進入容器
docker exec -it mysql8 /bin/bash
4.2 登錄mysql中
mysql -uroot -p123456
4.3 進行簡單添加查找測試
CREATE DATABASE mydatabase; USE mydatabase; CREATE TABLE users ( id INT PRIMARY KEY AUTO_INCREMENT, username VARCHAR(50) NOT NULL, email VARCHAR(100) NOT NULL ); INSERT INTO users (username, email) VALUES ('john_doe', 'john@example.com'), ('jane_smith', 'jane@example.com'), ('bob_jones', 'bob@example.com'); SELECT * FROM users;
二、主從復制安裝
2.1 主服務創(chuàng)建配置
1. 主從服務容器創(chuàng)建,并且配置
ps:這里也默認使用mysql8版本進行安裝。
docker run -p 3307:3306 \ --name mysql-master \ --privileged=true \ -v /app/mysql-master/log:/var/log/mysql \ -v /app/mysql-master/data:/var/lib/mysql \ -v /app/mysql-master/conf:/etc/mysql/conf.d \ -v /app/mysql-master/files:/var/lib/mysql-files \ -e MYSQL_ROOT_PASSWORD=123456 \ -d mysql:8.0.27
docker run
: 啟動一個新的Docker容器。-p 3307:3306
: 將主機的3307端口映射到容器的3306端口,這樣可以通過主機的3307端口訪問MySQL服務。--name mysql-master
: 為容器指定一個名稱,這里是mysql-master
。--privileged=true
: 賦予容器更高的權(quán)限。注意,一般情況下最好避免使用--privileged
,因為它可能會引入一些潛在的安全風險。-v /app/mysql-master/log:/var/log/mysql
: 將主機上的/app/mysql-master/log
目錄映射到容器內(nèi)的/var/log/mysql
,用于存儲MySQL的日志文件。-v /app/mysql-master/data:/var/lib/mysql
: 將主機上的/app/mysql-master/data
目錄映射到容器內(nèi)的/var/lib/mysql
,用于持久化存儲MySQL的數(shù)據(jù)。-v /app/mysql-master/conf:/etc/mysql/conf.d
: 將主機上的/app/mysql-master/conf
目錄映射到容器內(nèi)的/etc/mysql/conf.d
,用于提供自定義的MySQL配置文件。-v /app/mysql-master/files:/var/lib/mysql-files
: 將主機上的/app/mysql-master/files
目錄映射到容器內(nèi)的/var/lib/mysql-files
,用于存儲MySQL的文件。-e MYSQL_ROOT_PASSWORD=123456
: 設置MySQL root用戶的密碼為123456
。-d
: 以后臺模式運行容器。mysql:8.0.27
: 使用的MySQL鏡像的標簽,這里是MySQL 8.0.27版本
2. 創(chuàng)建配置文件并設置參數(shù)
vim /app/mysql-master/conf/my.cnf
[mysqld] ## 設置server_id, 同一個局域網(wǎng)中需要唯一 server_id=1001 ## 指定不需要同步的數(shù)據(jù)庫名稱 binlog-ignore-db=mysql ## 開啟二進制日志功能 log-bin=mall-mysql-bin ## 設置二進制日志使用內(nèi)存大小(事務) binlog_cache_size=1M ## 設置使用的二進制日志格式(mixed,statement,row) binlog_format=mixed ## 二進制日志過期清理時間。默認值為0,表示不自動清理 expire_logs_days=7 ## 跳過主從復制中遇到的所有錯誤或指定類型的錯誤,避免slave端復制中斷 ## 如:1062錯誤是指一些主鍵重復,1032錯誤是因為主從數(shù)據(jù)庫數(shù)據(jù)不一致 slave_skip_errors=1062
ps:在編寫配置的時候,參數(shù)后不要留有空格,避免不必要的錯誤?。?!
3. 重啟容器使得配置生效
docker restart mysql-master
4. 進入容器內(nèi),進行主服務中進行設置
4.1 進入容器
docker exec -it mysql-master /bin/bash
mysql -uroot -p123456
4.2 創(chuàng)建數(shù)據(jù)同步用戶,并給同步用戶授權(quán)
create user 'slave'@'%' identified by '123456'; grant replication slave, replication client on *.* to 'slave'@'%'; flush privileges;
4.3 查看所有用戶的權(quán)限
SELECT user, host, authentication_string, Grant_priv, Super_priv, Create_priv, Insert_priv, Update_priv, Delete_priv, Select_priv FROM mysql.user;
得到這樣得結(jié)果
4.4 查看MySQL主服務器的當前狀態(tài),包括二進制日志文件和位置
show master status;
參數(shù)說明:
File(文件) | 表示當前正在寫入的二進制日志文件的名稱 |
Position(位置) | 表示在二進制日志文件中的當前寫入位置 |
Binlog_Do_DB | 一個逗號分隔的數(shù)據(jù)庫列表,表示正在復制的二進制日志事件應用于哪些數(shù)據(jù)庫 |
Binlog_Ignore_DB | 一個逗號分隔的數(shù)據(jù)庫列表,表示正在復制的二進制日志事件不應用于哪些數(shù)據(jù)庫 |
Executed_Gtid_Set | 表示已經(jīng)執(zhí)行的 GTID(全局事務標識符)集合。在MySQL的 GTID 復制中 |
2.2 從服務創(chuàng)建配置
1. 從服務容器創(chuàng)建,并且配置
docker run -p 3308:3306 \ --name mysql-slave \ --privileged=true \ -v /app/mysql-slave/log:/var/log/mysql \ -v /app/mysql-slave/data:/var/lib/mysql \ -v /app/mysql-slave/conf:/etc/mysql/conf.d \ -v /app/mysql-master/files:/var/lib/mysql-files \ -e MYSQL_ROOT_PASSWORD=123456 \ -d mysql:8.0.27
2. 創(chuàng)建配置文件并設置參數(shù)
vim /app/mysql-slave/conf/my.cnf
[mysqld] ## 設置server_id, 同一個局域網(wǎng)內(nèi)需要唯一 server_id=1002 ## 指定不需要同步的數(shù)據(jù)庫名稱 binlog-ignore-db=mysql ## 開啟二進制日志功能,以備slave作為其它數(shù)據(jù)庫實例的Master時使用 log-bin=mall-mysql-slave1-bin ## 設置二進制日志使用內(nèi)存大小(事務) binlog_cache_size=1M ## 設置使用的二進制日志格式(mixed,statement,row) binlog_format=mixed ## 二進制日志過期清理時間。默認值為0,表示不自動清理 expire_logs_days=7 ## 跳過主從復制中遇到的所有錯誤或指定類型的錯誤,避免slave端復制中斷 ## 如:1062錯誤是指一些主鍵重復,1032是因為主從數(shù)據(jù)庫數(shù)據(jù)不一致 slave_skip_errors=1062 ## relay_log配置中繼日志 relay_log=mall-mysql-relay-bin ## log_slave_updates表示slave將復制事件寫進自己的二進制日志 log_slave_updates=1 ## slave設置只讀(具有super權(quán)限的用戶除外) read_only=1
ps:在編寫配置的時候,參數(shù)后不要留有空格,避免不必要的錯誤?。?!
3. 重啟容器使得配置生效
docker restart mysql-slave
4. 進入容器內(nèi),進行從服務中進行設置
4.1 進入容器
docker exec -it mysql-slave /bin/bash
mysql -uroot -p123456
4.2 配置從服務器,指定主服務器
我這里使用的是 CentOS7,查看服務器地址
ifconfig
CHANGE MASTER TO MASTER_HOST = '192.168.153.133', -- 主服務器的 IP 地址 MASTER_USER = 'slave', -- 用于連接主服務器的用戶名 MASTER_PASSWORD = '123456', -- 用于連接主服務器的密碼 MASTER_PORT = 3307, -- 主服務器的端口號 MASTER_LOG_FILE = 'binlog.000011', -- 主服務器的二進制日志文件 MASTER_LOG_POS = 1193, -- 主服務器的二進制日志位置 MASTER_CONNECT_RETRY = 30, -- 如果連接失敗,重試的時間間隔(秒) GET_MASTER_PUBLIC_KEY = 1; -- 啟用 SSL 模式,1 表示啟用
4.3 啟動 MySQL 主從復制
start slave;
4.4 查看 MySQL 主從復制狀態(tài)
# \G 可以將橫向的結(jié)果集表格轉(zhuǎn)換成縱向展示。 # slave status的字段比較多,縱向展示比友好 show slave status \G;
主要查看 Slave_IO_Running 和 Slave_SQL_Running是否為 Yes 狀態(tài)。
ps:如果在安裝中遇到問題可以查看下面這篇文章 ↓↓↓ ↓↓↓
2.3 安裝中的遇到的問題
如果在安裝過程中遇到問題,可以查看這篇文章,這是我遇到的一些問題和解決方案。
2.4 配置完成,進行簡單測試
1. 在主服務器中創(chuàng)建并添加數(shù)據(jù)
CREATE DATABASE IF NOT EXISTS mydatabase; USE mydatabase; CREATE TABLE IF NOT EXISTS users ( id INT PRIMARY KEY AUTO_INCREMENT, username VARCHAR(50) NOT NULL, email VARCHAR(100) NOT NULL ); INSERT INTO users (username, email) VALUES ('alice_white', 'alice@example.com'), ('charlie_brown', 'charlie@example.com'), ('emma_jones', 'emma@example.com'); select * from users;
2. 在從服務器中查詢數(shù)據(jù),是否同步
show databases; use mydatabase; select * from users;
3. 測試結(jié)果
主從服務器數(shù)據(jù)同步
到此這篇關于Docker配置MySql環(huán)境的實現(xiàn)步驟的文章就介紹到這了,更多相關Docker配置MySql環(huán)境內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
在vscode中使用ssh運行docker:從下載到運行全流程
首先在本機或者服務器上下載docker并運行,本文目的旨在本機下載docker并打包,然后在服務器上進行加載,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧2024-08-08Docker 容器生命周期 架構(gòu) 以及和VM之間的差異詳解
這篇文章主要介紹了Docker 容器生命周期 架構(gòu) 以及和VM之間的差異詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-11-11解讀Dockerfile中CMD和ENTRYPOINT是否可以混著用
在Dockerfile中,CMD和ENTRYPOINT可以混著用,CMD指定默認命令,ENTRYPOINT指定啟動命令,CMD可以被docker run命令的參數(shù)覆蓋2025-03-03使用Docker部署MySQL 5.7&8.0主從集群的方法步驟
這篇文章主要介紹了使用Docker部署MySQL 5.7&8.0主從集群的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-03-03docker?gitea?drone實現(xiàn)超輕量級CI?CD實戰(zhàn)詳解
這篇文章主要為大家介紹了docker?gitea?drone實現(xiàn)超輕量級CI?CD實戰(zhàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-10-10