docker創建mysql5.7.22並配置主從


debian系統

安裝docker (參考網址:https://cloud.tencent.com/developer/article/1360720)

1、更新現有的包列表

sudo apt update

  

2、安裝一些允許apt使用包通過HTTPS的必備軟件包

apt install apt-transport-https ca-certificates curl gnupg2 software-properties-common

  

3、將官方Docker存儲庫的GPG密鑰添加到您的系統

curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -

  

4、將Docker存儲庫添加到APT源:

add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable"

  

5、使用新添加的repo中的Docker包更新包數據庫

sudo apt update

  

6、確保您要從Docker repo而不是默認的Debian repo安裝:

apt-cache policy docker-ce

  

6、安裝Docker

apt install docker-ce

  

7、現在應該安裝Docker,守護進程啟動,並啟用進程啟動進程。檢查它是否正在運行:

systemctl status docker

  

8、拉取mysql指定版本鏡像(參考網址:https://www.cnblogs.com/xiaohanlin/p/10012730.html)

docker pull mysql:5.7.2 

或者使用DockerFIle的方式
使用DockerFile創建mysql可以使用如下辦法

 1 新建文件夾 dirName
 2 在文件夾下添加mysql配置文件 mysqld.cnf 當然 也可以不用
 3 
 4 添加DockerFile文件
 5 添加內容
 6 FROM mysql:5.7.22
 7 COPY ["mysqld.cnf","/etc/mysql/mysql.conf.d/mysqld.cnf"] #也可以不加
 8 EXPOSE 3306
 9 
10 執行命令 docker build -t mysql5.7.22:v0 . 創建本地鏡像
11 build 為創建本地鏡像
12 -t 指定鏡像的名字
13 : 指定標簽的名字 
14 . 指定遠程服務器的對應文件位置 build 在創建鏡像的時候 實際上使用的是遠程的服務器(首先我們要理解 docker build 的工作原理。Docker 在運行時分為 Docker 引擎(也就是服務端守護進程)和客戶端工具。Docker 的引擎提供了一組 REST API,被稱為 Docker Remote API,而如 docker 命令這樣的客戶端工具,則是通過這組 API 與 Docker 引擎交互,從而完成各種功能。因此,雖然表面上我們好像是在本機執行各種 docker 功能,但實際上,一切都是使用的遠程調用形式在服務端(Docker 引擎)完成。也因為這種 C/S 設計,讓我們操作遠程服務器的 Docker 引擎變得輕而易舉。) 該命令 會將.的所有內容 上傳到遠程服務器,因此我們應當盡可能的使得所上傳的文件夾精簡,而DockerFile中的文件路徑,也應當正確對應。
15 以上文的COPY為例 是將本地當前文件夾的mysqld.cnf文件復制到所創建鏡像的/etc/mysql/mysql.conf.d/mysqld.cnf位置 並命名為mysqld.cnf,如果寫成COPY ["../mysqld.cnf","/etc/mysql/mysql.conf.d/mysqld.cnf"] 則在執行build命令的時候需要這么
16 寫(docker build -t mysql5.7.22:v0 ..),如此以來,就會將..文件夾(當前文件的上層文件夾的所有內容)傳到遠程服務器,鏡像無疑就會變得龐大臃腫。

 

9、啟動mysql容器

1 (此處使用宿主機的配置文件、存儲路徑和日記路徑啟動 需要自己創建、如果沒有指定的配置文件可使用
2 docker cp mysql5_7_22_1:/etc/mysql/mysql.conf.d/mysqld.cnf /etc/conf/mysql/ 
3 mysql5_7_22_1為容器名
4 從容器拷貝一份到服務器)
 1 docker run --name mysql5_7_22 -p 3306:3306 --restart=always -v /etc/conf/mysql/mysqld.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf -v /var/log/mysql/log/:/var/log/mysql -v /data/mysql/:/var/lib/mysql --privileged=true -e MYSQL_ROOT_PASSWORD=root -d guodakai/mysql5.7.22:v0
 2 -p 3306:3306 將容器的 3306 端口映射到主機的 3306 端口 (前面為宿主機,后面為容器)
 3 --name 容器名(自己定義)
 4 --restart=always 將容器設置為自啟
 5 -v 將宿主機指定內容掛載到容器
 6 --privileged= true 是我啟動mysql的時候發現mysql啟動不了,通過 docker logs命令查看,發現提示信息是:chown: changing ownership of ‘/var/lib/mysql/....‘: Permission denied (docker logs -f mysql5_7_22 查看指定日志文件)
 7 -e 初始化 root 用戶的密碼
 8 -d 在后台運行容器
 9 
10 如果希望容器隨docker啟動而啟動 可添加 --restart=always
11 如果要設置已經啟動的容器可以使用一下命令
12 docker container update --restart=alway 容器名

 

10、進入容器

docker exec -it mysql5_7_22 bash

  

11、退出容器

exit

  

12、將其他服務器數據導入容器數據庫(兩者需要可以相互訪問、參考網址:https://www.cnblogs.com/osfipin/p/9927185.html)

1 mysqldump -uroot -proot --opt jupin_zhizuan | mysql --host=192.168.31.136 -uroot -proot -C jupin_zhizuan
2 --opt命令可選,建議加上。等同於指定 --add-drop-tables--add-locking --create-option --disable-keys--extended-insert --lock-tables --quick --set-charset。它可以給出很快的轉儲操作並產生一個可以很快裝入MySQL服務器的轉儲文件。
3 -C 客戶端和服務器之間啟用壓縮傳遞所有信息。當然得要有咯。

 

13、添加主從服務 (舊方式)
修改/etc/mysql/mysql.conf.d/mysqld.cnf

1 主庫添加內容:
2 character-set-server=utf8
3 default-storage-engine=INNODB
4 sql_mode=STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION
5 
6 server-id=1
7 log_bin=/var/log/mysql/binlog
 1 從庫添加內容:
 2 character-set-server=utf8
 3 default-storage-engine=INNODB
 4 sql_mode=STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION
 5 
 6 server-id=2
 7 log_bin=/var/log/mysql/binlog
 8 innodb_file_per_table=ON
 9 skip_name_resolve=ON
10 binlog-format=row
11 log-slave-updates=true
12 relay_log=/var/log/mysql/relay.log

 

以下操作可以使用 navicat操作 (再此之情 需要先同步兩個數據庫的數據)

1 進入主庫
2 查詢主庫狀態 SHOW MASTER STATUS
3 進入從庫
4 停止從庫 stop slave;
5 配置主從連接 CHANGE MASTER TO MASTER_HOST='192.168.174.136',MASTER_USER='root', MASTER_PASSWORD='123456',MASTER_PORT=3306,MASTER_LOG_FILE='binlog.000003',MASTER_LOG_POS=154;
6 (MASTER_LOG_FILE,MASTER_LOG_POS 為主庫狀態的file 和 position)
7 啟動從庫 start slave;

!!!主從設置完成后 需要添加一些帳號 只讀等
!!!主從設置完成后 從庫掛掉后 重啟會自動將數據補全

 

//GTID主從配置(推薦)  參考網址:https://blog.51cto.com/7834466/2345202

 1 主配置文件添加內容
 2 [mysqld]
 3 #GTID:
 4 server_id=135 #服務器id
 5 gtid_mode=on #開啟gtid模式
 6 enforce_gtid_consistency=on #強制gtid一致性,開啟后對於特定create table不被支持
 7 
 8 #binlog
 9 log_bin=master-binlog
10 log-slave-updates=1 
11 binlog_format=row #強烈建議,其他格式可能造成數據不一致
12 
13 #relay log
14 skip_slave_start=1 #這一句可以不加 添加之后mysql重啟后從庫的slave不自動重啟
 1 從庫的配置文件添加內容
 2 [mysqld]
 3 #GTID:
 4 gtid_mode=on
 5 enforce_gtid_consistency=on
 6 server_id=143
 7 
 8 #binlog
 9 log-bin=slave-binlog
10 log-slave-updates=1
11 binlog_format=row #強烈建議,其他格式可能造成數據不一致
12 
13 #relay log
14 skip_slave_start=1 #同上,這一句可以不加 添加之后mysql重啟后從庫的slave不自動重啟

 

今進入從庫
依次執行

1 stop slave;
2 CHANGE MASTER TO MASTER_HOST='192.168.1.135',MASTER_USER='repl',MASTER_PASSWORD='xxx', MASTER_PORT=3306,MASTER_AUTO_POSITION = 1;
3 start slave;
4 show slave status\G; 查看狀態

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM