外包公司做的網(wǎng)站貼吧友情鏈接在哪
目錄
一、簡(jiǎn)單安裝
1. 首先從Docker Hub中拉取鏡像
2. 啟動(dòng)嘗試創(chuàng)建MySQL容器,并設(shè)置掛載卷。
3. 查看mysql8這個(gè)容器是否啟動(dòng)成功
4. 如果已經(jīng)成功啟動(dòng),進(jìn)入容器中簡(jiǎn)單測(cè)試
4.1 進(jìn)入容器
4.2 登錄mysql中?
4.3 進(jìn)行簡(jiǎn)單添加查找測(cè)試
二、主從復(fù)制安裝
2.1 主服務(wù)創(chuàng)建配置
1. 主從服務(wù)容器創(chuàng)建,并且配置
2. 創(chuàng)建配置文件并設(shè)置參數(shù)
3. 重啟容器使得配置生效
4. 進(jìn)入容器內(nèi),進(jìn)行主服務(wù)中進(jìn)行設(shè)置
4.1 進(jìn)入容器
4.2?創(chuàng)建數(shù)據(jù)同步用戶,并給同步用戶授權(quán)
4.3 查看所有用戶的權(quán)限
4.4 查看MySQL主服務(wù)器的當(dāng)前狀態(tài),包括二進(jìn)制日志文件和位置
2.2 從服務(wù)創(chuàng)建配置
1. 從服務(wù)容器創(chuàng)建,并且配置
2.?創(chuàng)建配置文件并設(shè)置參數(shù)
3. 重啟容器使得配置生效
4.?進(jìn)入容器內(nèi),進(jìn)行從服務(wù)中進(jìn)行設(shè)置
4.1 進(jìn)入容器
4.2?配置從服務(wù)器,指定主服務(wù)器
4.3 啟動(dòng) MySQL 主從復(fù)制
4.4 查看 MySQL 主從復(fù)制狀態(tài)
2.3 安裝中的遇到的問(wèn)題
2.4 配置完成,進(jìn)行簡(jiǎn)單測(cè)試
1. 在主服務(wù)器中創(chuàng)建并添加數(shù)據(jù)
2. 在從服務(wù)器中查詢數(shù)據(jù),是否同步
3. 測(cè)試結(jié)果
一、簡(jiǎn)單安裝
1. 首先從Docker Hub中拉取鏡像
這里我要安裝的是mysql8版本。
docker pull mysql:8.0.27
2. 啟動(dòng)嘗試創(chuàng)建MySQL容器,并設(shè)置掛載卷。
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
: 為容器指定一個(gè)名稱,這里是mysql8
--privileged=true
: 賦予容器更多的權(quán)限。在一般情況下,盡量避免使用--privileged
,因?yàn)樗鼤?huì)賦予容器更多的權(quán)限,可能會(huì)帶來(lái)一些安全風(fēng)險(xiǎn)。-v /app/mysql8/log:/var/log/mysql
: 將主機(jī)上的/app/mysql8/log
目錄映射到容器內(nèi)的/var/log/mysql
,用于存儲(chǔ)MySQL的日志文件。-v /app/mysql8/data:/var/lib/mysql
: 將主機(jī)上的/app/mysql8/data
目錄映射到容器內(nèi)的/var/lib/mysql
,用于持久化存儲(chǔ)MySQL的數(shù)據(jù)。-v /app/mysql8/conf:/etc/mysql/conf.d
: 將主機(jī)上的/app/mysql8/conf
目錄映射到容器內(nèi)的/etc/mysql/conf.d
,用于提供自定義的MySQL配置文件。-v /app/mysql8/files:/var/lib/mysql-files
: 將主機(jī)上的/app/mysql8/files
目錄映射到容器內(nèi)的/var/lib/mysql-files
,用于存儲(chǔ)MySQL的文件。-e MYSQL_ROOT_PASSWORD=123456
: 設(shè)置MySQL root用戶的密碼為123456
。-d
: 后臺(tái)運(yùn)行容器。
3. 查看mysql8這個(gè)容器是否啟動(dòng)成功
docker ps
4. 如果已經(jīng)成功啟動(dòng),進(jìn)入容器中簡(jiǎn)單測(cè)試
4.1 進(jìn)入容器
docker exec -it mysql8 /bin/bash
4.2 登錄mysql中?
mysql -uroot -p123456
4.3 進(jìn)行簡(jiǎn)單添加查找測(cè)試
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;
二、主從復(fù)制安裝
2.1 主服務(wù)創(chuàng)建配置
1. 主從服務(wù)容器創(chuàng)建,并且配置
ps:這里也默認(rèn)使用mysql8版本進(jìn)行安裝。
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
: 啟動(dòng)一個(gè)新的Docker容器。-p 3307:3306
: 將主機(jī)的3307端口映射到容器的3306端口,這樣可以通過(guò)主機(jī)的3307端口訪問(wèn)MySQL服務(wù)。--name mysql-master
: 為容器指定一個(gè)名稱,這里是mysql-master
。--privileged=true
: 賦予容器更高的權(quán)限。注意,一般情況下最好避免使用--privileged
,因?yàn)樗赡軙?huì)引入一些潛在的安全風(fēng)險(xiǎn)。-v /app/mysql-master/log:/var/log/mysql
: 將主機(jī)上的/app/mysql-master/log
目錄映射到容器內(nèi)的/var/log/mysql
,用于存儲(chǔ)MySQL的日志文件。-v /app/mysql-master/data:/var/lib/mysql
: 將主機(jī)上的/app/mysql-master/data
目錄映射到容器內(nèi)的/var/lib/mysql
,用于持久化存儲(chǔ)MySQL的數(shù)據(jù)。-v /app/mysql-master/conf:/etc/mysql/conf.d
: 將主機(jī)上的/app/mysql-master/conf
目錄映射到容器內(nèi)的/etc/mysql/conf.d
,用于提供自定義的MySQL配置文件。-v /app/mysql-master/files:/var/lib/mysql-files
: 將主機(jī)上的/app/mysql-master/files
目錄映射到容器內(nèi)的/var/lib/mysql-files
,用于存儲(chǔ)MySQL的文件。-e MYSQL_ROOT_PASSWORD=123456
: 設(shè)置MySQL root用戶的密碼為123456
。-d
: 以后臺(tái)模式運(yùn)行容器。mysql:8.0.27
: 使用的MySQL鏡像的標(biāo)簽,這里是MySQL 8.0.27版本
2. 創(chuàng)建配置文件并設(shè)置參數(shù)
vim /app/mysql-master/conf/my.cnf
[mysqld]
## 設(shè)置server_id, 同一個(gè)局域網(wǎng)中需要唯一
server_id=1001
## 指定不需要同步的數(shù)據(jù)庫(kù)名稱
binlog-ignore-db=mysql
## 開啟二進(jìn)制日志功能
log-bin=mall-mysql-bin
## 設(shè)置二進(jìn)制日志使用內(nèi)存大小(事務(wù))
binlog_cache_size=1M
## 設(shè)置使用的二進(jìn)制日志格式(mixed,statement,row)
binlog_format=mixed
## 二進(jìn)制日志過(guò)期清理時(shí)間。默認(rèn)值為0,表示不自動(dòng)清理
expire_logs_days=7
## 跳過(guò)主從復(fù)制中遇到的所有錯(cuò)誤或指定類型的錯(cuò)誤,避免slave端復(fù)制中斷
## 如:1062錯(cuò)誤是指一些主鍵重復(fù),1032錯(cuò)誤是因?yàn)橹鲝臄?shù)據(jù)庫(kù)數(shù)據(jù)不一致
slave_skip_errors=1062
ps:在編寫配置的時(shí)候,參數(shù)后不要留有空格,避免不必要的錯(cuò)誤!!!
3. 重啟容器使得配置生效
docker restart mysql-master
4. 進(jìn)入容器內(nèi),進(jìn)行主服務(wù)中進(jìn)行設(shè)置
4.1 進(jìn)入容器
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主服務(wù)器的當(dāng)前狀態(tài),包括二進(jìn)制日志文件和位置
show master status;
參數(shù)說(shuō)明:
File(文件) | 表示當(dāng)前正在寫入的二進(jìn)制日志文件的名稱 |
Position(位置) | 表示在二進(jìn)制日志文件中的當(dāng)前寫入位置 |
Binlog_Do_DB | 一個(gè)逗號(hào)分隔的數(shù)據(jù)庫(kù)列表,表示正在復(fù)制的二進(jìn)制日志事件應(yīng)用于哪些數(shù)據(jù)庫(kù) |
Binlog_Ignore_DB | 一個(gè)逗號(hào)分隔的數(shù)據(jù)庫(kù)列表,表示正在復(fù)制的二進(jìn)制日志事件不應(yīng)用于哪些數(shù)據(jù)庫(kù) |
Executed_Gtid_Set | 表示已經(jīng)執(zhí)行的 GTID(全局事務(wù)標(biāo)識(shí)符)集合。在MySQL的 GTID 復(fù)制中 |
?
2.2 從服務(wù)創(chuàng)建配置
1. 從服務(wù)容器創(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è)置參數(shù)
vim /app/mysql-slave/conf/my.cnf
[mysqld]
## 設(shè)置server_id, 同一個(gè)局域網(wǎng)內(nèi)需要唯一
server_id=1002
## 指定不需要同步的數(shù)據(jù)庫(kù)名稱
binlog-ignore-db=mysql
## 開啟二進(jìn)制日志功能,以備slave作為其它數(shù)據(jù)庫(kù)實(shí)例的Master時(shí)使用
log-bin=mall-mysql-slave1-bin
## 設(shè)置二進(jìn)制日志使用內(nèi)存大小(事務(wù))
binlog_cache_size=1M
## 設(shè)置使用的二進(jìn)制日志格式(mixed,statement,row)
binlog_format=mixed
## 二進(jìn)制日志過(guò)期清理時(shí)間。默認(rèn)值為0,表示不自動(dòng)清理
expire_logs_days=7
## 跳過(guò)主從復(fù)制中遇到的所有錯(cuò)誤或指定類型的錯(cuò)誤,避免slave端復(fù)制中斷
## 如:1062錯(cuò)誤是指一些主鍵重復(fù),1032是因?yàn)橹鲝臄?shù)據(jù)庫(kù)數(shù)據(jù)不一致
slave_skip_errors=1062
## relay_log配置中繼日志
relay_log=mall-mysql-relay-bin
## log_slave_updates表示slave將復(fù)制事件寫進(jìn)自己的二進(jìn)制日志
log_slave_updates=1
## slave設(shè)置只讀(具有super權(quán)限的用戶除外)
read_only=1
ps:在編寫配置的時(shí)候,參數(shù)后不要留有空格,避免不必要的錯(cuò)誤!!!
3. 重啟容器使得配置生效
docker restart mysql-slave
4.?進(jìn)入容器內(nèi),進(jìn)行從服務(wù)中進(jìn)行設(shè)置
4.1 進(jìn)入容器
docker exec -it mysql-slave /bin/bash
mysql -uroot -p123456
4.2?配置從服務(wù)器,指定主服務(wù)器
我這里使用的是 CentOS7,查看服務(wù)器地址
ifconfig
CHANGE MASTER TOMASTER_HOST = '192.168.153.133', ? ? ? -- 主服務(wù)器的 IP 地址MASTER_USER = 'slave', ? ? ? ? ? ? ? ? ?-- 用于連接主服務(wù)器的用戶名MASTER_PASSWORD = '123456', ? ? ? ? ? ? -- 用于連接主服務(wù)器的密碼MASTER_PORT = 3307, ? ? ? ? ? ? ? ? ? ? -- 主服務(wù)器的端口號(hào)MASTER_LOG_FILE = 'binlog.000011', ? ? ?-- 主服務(wù)器的二進(jìn)制日志文件MASTER_LOG_POS = 1193, ? ? ? ? ? ? ? ? ?-- 主服務(wù)器的二進(jìn)制日志位置MASTER_CONNECT_RETRY = 30, ? ? ? ? ? ? ?-- 如果連接失敗,重試的時(shí)間間隔(秒)GET_MASTER_PUBLIC_KEY = 1; ? ? ? ? ? ? ?-- 啟用 SSL 模式,1 表示啟用
4.3 啟動(dòng) MySQL 主從復(fù)制
start slave;
?4.4 查看 MySQL 主從復(fù)制狀態(tài)
# \G 可以將橫向的結(jié)果集表格轉(zhuǎn)換成縱向展示。
# slave status的字段比較多,縱向展示比友好
show slave status \G;
主要查看 Slave_IO_Running 和?Slave_SQL_Running是否為 Yes 狀態(tài)。
ps:如果在安裝中遇到問(wèn)題可以查看下面這篇文章? ↓↓↓?↓↓↓?
2.3 安裝中的遇到的問(wèn)題
如果在安裝過(guò)程中遇到問(wèn)題,可以查看這篇文章,這是我遇到的一些問(wèn)題和解決方案。
Docker中安裝MySql的遇到的問(wèn)題http://t.csdnimg.cn/ujsL1
2.4 配置完成,進(jìn)行簡(jiǎn)單測(cè)試
1. 在主服務(wù)器中創(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. 在從服務(wù)器中查詢數(shù)據(jù),是否同步
show databases;use mydatabase;select * from users;
3. 測(cè)試結(jié)果
主從服務(wù)器數(shù)據(jù)同步?
?