安裝dockers 參考 https://www.cnblogs.com/xiufengchen/p/10387055.html
docker 部署MySQL主從 參考 https://blog.csdn.net/ClassmateLin/article/details/100512910
安裝docker
一 docker安裝:
1 首先需要檢查linux內核的版本,docker要求linux內核是在3.10之上的,
1 |
|
2 更新yum源,注意這步應該是管理員權限,如果當前不是管理員,切換至管理員登錄,在更新過程需要輸入 y 確認
sudo yum update
3 卸載舊版本的docker
sudo yum remove docker docker-common docker-selinux docker-engine
4 安裝需要的軟件包, yum-util 提供yum-config-manager功能,另外兩個是devicemapper驅動依賴的
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
5 設置yum源
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
以上三個命令執行的結果
6 可以查看所有倉庫中所有docker版本,並選擇特定版本安裝
yum list docker-ce --showduplicates | sort -r
7 安裝docker ,一下命令只需要執行一個就可以了.
sudo yum install docker-ce #由於repo中默認只開啓stable倉庫,故這裏安裝的是最新穩定版17.12.0 sudo yum install <FQPN> # 例如:sudo yum install docker-ce-17.12.0.ce
8 啓動並加入開機啓動
sudo systemctl start docker sudo systemctl enable docker
9 查看docker的版本
docker version
docker 部署mysql 主從
獲取Mysql鏡像
網易蜂巢鏡像:
拉取鏡像:
docker pull hub.c.163.com/library/mysql:latest
查看鏡像:docker images
創建文件夾和配置文件
mkdir -p /docker/mysql/{master,slave}/data
添加主庫配置文件: vim /docker/mysql/master/my.cnf
[mysqld]
user=mysql
log-bin=mysql-bin
server-id=1
character-set-server=utf8mb4
default_authentication_plugin=mysql_native_password
table_definition_cache=400
[client]
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4
添加從庫配置文件:sudo vim /docker/mysql/slave/my.cnf
[mysqld]
user=mysql
server-id=2
character-set-server=utf8mb4
default_authentication_plugin=mysql_native_password
table_definition_cache=400
[client]
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4
創建Mysql橋接網絡,用於主從容器直接互聯:
docker network create mysql
創建Mysql主庫容器:
docker run -d --privileged=true -p 3307:3306 -v /docker/mysql/master/my.cnf:/etc/mysql/my.cnf -v /docker/mysql/master/data:/var/lib/mysql -v /docker/mysql/master/mysql-files:/var/lib/mysql-files -e MYSQL_ROOT_PASSWORD=123456 --name mysql-master --network mysql --network-alias mysql-master mysql
創建Mysql從庫容器:
docker run -d --privileged=true -p 3308:3306 -v /docker/mysql/slave/my.cnf:/etc/mysql/my.cnf -v /docker/mysql/slave1/data:/var/lib/mysql -v /docker/mysql/slave/mysql-files:/var/lib/mysql-files -e MYSQL_ROOT_PASSWORD=123456 --name mysql-slave --network mysql --network-alias mysql-slave mysql
配置Mysql主從複製
配置主服務器:
docker exec -it mysql-master bash
mysql -u root -p
密碼是上面docker命令中MYSQL_ROOT_PASSWORD中設置的。
# 這裏使用root用戶進行主從複製, %爲允許所有ip進行復制。
GRANT REPLICATION SLAVE ON *.* TO 'root'@'%';
# 刷新權限
flush privileges;
# 查看主服務器狀態
show master status;
#需要記錄其中的File, Position字段內容
exit; # 退出mysql
exit; # 退出容器
這裏開啓主庫遠程訪問權限,如果從庫遠程連接也同理
命令:use mysql;
命令:select host,user from user;
命令:ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
命令:flush privileges;
配置從服務器:
docker ps
docker exec -it mysql-slave bash
mysql -u root -p 密碼是上面docker命令中 MYSQL_ROOT_PASSWORD中設置的
#輸入以下內容
change master to master_host='mysql-master',master_user='root',master_password='root密碼',master_log_file='剛纔記住的File列的內容',master_log_pos=position的內容(不用加引號),master_port=3306;
# 例如
change master to master_host='mysql-master',master_user='root',master_password='123456',master_log_file='mysql-bin.000005',master_log_pos=502,master_port=3306;
# 啓動slave
start slave;
# 查看slave狀態
show slave status\G;
當Slave_IO_Running和Slave SQL Ruing都是Yes時,說明配置成功了,
測試主從複製
進入主庫:docker exec -it mysql-master bash和mysql -u root -p
創建數據庫和表,添加測試數據:
創建數據庫
create database goods;
進入數據庫
use goods;
查看當前數據庫
select database();
查看當前數據庫裏面的表
show tables;
創建test表
create table test(
id int,
city varchar(255));
向表中插入數據
insert into test values (1,'beijing'),(2,'shanghai');
查看錶裏的數據
select * from test;
進入從庫:
docker exec -it mysql-slave bash 和 mysql -u root -p
驗證數據是否同步:
show databases;
use goods;
show tables;
select * from test;
mysql 主從庫配置完成
但是發現一個問題
在從庫上操作增刪改 的數據,主庫不跟着變動
主庫 上操作增刪改 的數據 ,從庫跟着變動