docker查询mysql 有哪些版本的镜像_运维有话说 | Mysql容器化主主从架构搭建
1 前言
1.1?介紹
???MySQL可以適用于容器嗎?在這一篇里,簡單地為大家介紹一下MySQL在容器上的使用并且實現主主從的架構實施。
???容器是軟件的標準單元,它將代碼及其所有依賴項打包,以便應用程序在不同的計算環境之間快速可靠地運行。Docker容器映像是一個輕量級的、獨立的、可執行的軟件包,它包括運行應用程序所需的一切:代碼、運行時、系統工具、系統庫和設置。Docker是實現容器技術的一個開源項目,它將程序以及程序所有的依賴都打包到Docker容器里面。
???使用Docker時,需要用到Docker鏡像。鏡像可以從正式的鏡像庫下載,也可以人工制作和更新。本次Mysql鏡像從https://hub.docker.com/下載,也可以從https://container-registry.oracle.com下載企業版和社區版本兩個版本。
1.2?環境
系統 | 版本 | IP |
CentOS Linux | 7.7.1908 | 192.168.100.75 |
Docker | 19.03.12 | |
Mysql | 5.7.31 |
2?實施過程
2.1?docker環境
2.1.1?Docker服務安裝
yum install -y docker-ce2.1.2?下載Mysql鏡像
$ docker pull mysql:5.7.31$ docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEmynginx/nginx v1.1.2 eb4bb8b766f5 2 weeks ago 340MBmynginx/nginx v1.1.1 f9c14ba8b254 2 weeks ago 328MBcentos latest 0d120b6ccaa8 2 weeks ago 215MBnginx latest 08393e824c32 3 weeks ago 132MBmysql 5.7.31 718a6da099d8 3 weeks ago 448MB
2.1.3?修改鏡像
???修改dockerfile中的配置,包括鏡像的時區和默認系統字符集
$ cd /root/dockert/dockerfile$ vi DockerfileFROM mysql:5.7.31MAINTAINER LiuRUN echo "alias ls='ls --color=auto'" >> /root/.bashrc \ && ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtimeENV LANG=C.UTF-8編譯鏡像
docker build -t mysqlt:5.7.31 .查看到新的創建鏡像
docker imagesREPOSITORY??????TAG???????IMAGE?ID???????CREATED??????????SIZEmysqlt 5.7.31 7a2a0aadd202 25 seconds ago 448MBmynginx/nginx v1.1.2 eb4bb8b766f5 2 weeks ago 340MBmynginx/nginx v1.1.1 f9c14ba8b254 2 weeks ago 328MBcentos latest 0d120b6ccaa8 2 weeks ago 215MBnginx latest 08393e824c32 3 weeks ago 132MBmysql 5.7.31 718a6da099d8 3 weeks ago 448MB2.2??啟動Mysql
???MySQL容器化其實也需要映射端口,數據持久化,加載配置文件等操作。本地啟動三個mysql實例容器,容器端口3306分別映射到宿主機的33061、33062、33063端口。
2.2.1?創建目錄
?? Data目錄存放各mysql實例的數據文件,etc存放mysql的配置啟動文件。
mkdir -p /data/5.7.31/33061/datamkdir -p /data/5.7.31/33061/etcmkdir -p /data/5.7.31/33062/datamkdir -p /data/5.7.31/33062/etcmkdir -p /data/5.7.31/33063/datamkdir -p /data/5.7.31/33063/etc
2.2.2?添加配置文件
???因需配置主主從復制架構在master1和master2上打開bin-log和log_slave_updates參數。
cd /data/5.7.31/33061/etcvim my.cnf[mysqld]# basic settings #pid-file = /var/run/mysqld/mysqld.pidsocket = /var/run/mysqld/mysqld.sockdatadir = /var/lib/mysqlserver_id = 561101user = mysqlport = 3306log_error = /var/lib/mysql/error.logsql_mode = "STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER"autocommit = 1character_set_server=utf8transaction_isolation = READ-COMMITTED explicit_defaults_for_timestamp = 1 max_allowed_packet = 16777216 event_scheduler = 1 log_timestamps = system lower_case_table_names=1 # connection #interactive_timeout = 1800 wait_timeout = 1800 lock_wait_timeout = 1800 skip_name_resolve = 1 max_connections = 512 max_connect_errors = 100000 # table cache performance settings #table_open_cache = 4096 table_definition_cache = 4096 table_open_cache_instances?=?16?????????????????????????????# session memory settings #read_buffer_size = 16M read_rnd_buffer_size = 32M sort_buffer_size = 32M tmp_table_size = 64M join_buffer_size = 128M thread_cache_size = 64 # log settings #slow_query_log = 1 slow_query_log_file = /var/lib/mysql/slow.log log_queries_not_using_indexes = 1 log_slow_admin_statements = 1 log_slow_slave_statements = 1 log_throttle_queries_not_using_indexes = 10 expire_logs_days = 7 long_query_time = 2 min_examined_row_limit = 100 binlog-rows-query-log-events = 1 log-bin-trust-function-creators = 1 max_binlog_size = 512M # InnoDB settings #innodb_page_size = 16384 innodb_data_file_path = ibdata1:256M:autoextend innodb_buffer_pool_size = 512M innodb_buffer_pool_instances = 16 innodb_buffer_pool_load_at_startup = 1 innodb_buffer_pool_dump_at_shutdown = 1 innodb_lru_scan_depth = 4096 innodb_lock_wait_timeout = 50 innodb_io_capacity = 10000 innodb_io_capacity_max = 20000innodb_flush_method = O_DIRECT innodb_file_format = Barracuda innodb_file_format_max = Barracudainnodb_undo_logs = 128 innodb_undo_tablespaces = 3 innodb_flush_neighbors = 0 innodb_log_buffer_size = 16777216 innodb_log_file_size = 131072000 innodb_log_files_in_group = 3 innodb_purge_threads = 4 innodb_large_prefix = 1 innodb_thread_concurrency = 64 innodb_print_all_deadlocks = 1 innodb_strict_mode = 1 innodb_sort_buffer_size = 67108864 innodb_write_io_threads = 16 innodb_read_io_threads = 16 innodb_file_per_table = 1 innodb_stats_persistent_sample_pages = 64 innodb_autoinc_lock_mode = 2 innodb_online_alter_log_max_size = 1G innodb_open_files = 4096 innodb_flush_log_at_trx_commit = 1 # replication settings ##slave_parallel_workers = 4 #slave_parallel_type = 'LOGICAL_CLOCK' #master_info_repository = table #relay_log_info_repository = table sync_binlog = 1 gtid_mode?=?on???????????????????????????????????????????????????enforce_gtid_consistency?=?1?????????????????????????????????????log_slave_updates?=?1????????????????????????????????????????????log_bin?=?/var/lib/mysql/mysql-bin?????????????????????log_bin_index?=?/var/lib/mysql/binlog.index????????????binlog_format?=?row???????????????????????????????????????????????binlog_row_image?=?minimal????????????????????????????????????????binlog_rows_query_log_events = 1
2.2.3?運行Mysql實例
???Mysql容器端口3306映射主機33061,
/var/lib/mysql綁定本地/data/5.7.31/33061/data,
/etc/mysql綁定本地/data/5.7.31/33061/etc,
mysql實例root密碼指定123456
$ docker run -itd -p 33061:3306 --name mysqlmaster1 --hostname=master1 -v /data/5.7.31/33061/etc:/etc/mysql -v /data/5.7.31/33061/data:/var/lib/mysql --privileged=true -e MYSQL_ROOT_PASSWORD=123456 mysqlt:5.7.31df94f5a97a57084ec1cdaab49e64f1e4bb4c44f0e8e01de5a736977abdb316c4# 解釋下各個參數的含義
-d: 后臺運行容器,并返回容器ID
-i: 以交互模式運行容器,通常與 -t 同時使用
-t: 為容器重新分配一個偽輸入終端,通常與 -i 同時使用
-p: 指定端口映射,格式為:主機(宿主)端口:容器端口
--name="mysql57": 為容器指定一個名稱
--hostname=mysql57: 指定容器的hostname
-v: 綁定一個卷
--privileged=true: 以特權方式啟動容器
查看容器運行情況
$ docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESdf94f5a97a57 mysqlt:5.7.31 "docker-entrypoint.s?? 5 seconds ago Up 2 seconds 33060/tcp, 0.0.0.0:33061->3306/tcp mysqlmaster1啟動過程中可查看日志
docker logs df94f5a97a57084ec1cdaab49e64f1e4bb4c44f0e8e01de5a736977abdb316c4查看mysql日志
tail -100f error.log刪除容器
docker rm df94f5a97a57相同方法啟動另兩條mysql實例
docker run -itd -p 33062:3306 --name mysqlmaster2 --hostname=master2 -v /data/5.7.31/33062/etc:/etc/mysql -v /data/5.7.31/33062/data:/var/lib/mysql --privileged=true -e MYSQL_ROOT_PASSWORD=123456 mysqlt:5.7.31$ docker?psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESb16630629a70 mysqlt:5.7.31 "docker-entrypoint.s?? 8 seconds ago Up 5 seconds 33060/tcp, 0.0.0.0:33063->3306/tcp mysqlslave13020b33142a8 mysqlt:5.7.31 "docker-entrypoint.s?? 30 seconds ago Up 28 seconds 33060/tcp, 0.0.0.0:33062->3306/tcp mysqlmaster2b179db93d92f mysqlt:5.7.31 "docker-entrypoint.s?? 4 minutes ago Up 4 minutes 33060/tcp, 0.0.0.0:33061->3306/tcp mysqlmaster1???補充:# 更改mysql實例配置只需要修改宿主機 /data/5.7.31/33061/etc/my.cnf 文件,然后重啟容器即可
docker restart mysqlmaster12.3?建立主主從關系
2.3.1?創建測試數據
???在主庫master1上創建測試數據
登錄數據庫兩種方式
1)本地登錄數據庫
mysql -uroot -p -P33061 -h192.168.100.752)進去容器里后登錄數據庫
docker exec -it mysqlmaster1 /bin/bash或
docker exec -it [CONTAINER ID] /bin/bash進入容器后,登錄數據庫進行操作
root@master1:/# mysql -uroot -p123456mysql> create database test1;mysql> use test1;mysql> create table tbl_test ( id bigint(20) NOT NULL AUTO_INCREMENT, name varchar(20) NOT NULL, PRIMARY KEY (id), KEY idx_name (name)) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;mysql> insert into tbl_test(name) values('aaa');mysql> insert into tbl_test(name) values('bbb');mysql> insert into tbl_test(name) values('ccc');mysql> select * from tbl_test;+----+------+| id | name |+----+------+| 1 | aaa || 2 | bbb || 3 | ccc |+----+------+3 rows in set (0.00 sec)2.3.2?配置同步
1)在master1上創建同步賬號
mysql> grant replication slave on *.* to 'rep'@'%' identified by 'rep';mysql> flush privileges;2)將master1上的數據同步至 master2和slave1上
#導出docker exec mysqlmaster1 sh -c 'exec mysqldump --all-databases --set-gtid-purged=off--master-data=2 --flush-logs -uroot -p"$MYSQL_ROOT_PASSWORD" ' > /tmp/all-databases.sql#導入docker exec -i mysqlmaster2 sh -c 'exec mysql -uroot -p"$MYSQL_ROOT_PASSWORD"' < /tmp/all-databases.sqldocker?exec?-i?mysqlslave1?sh?-c?'exec?mysql?-uroot?-p"$MYSQL_ROOT_PASSWORD"'?all-databases.sql3)確認三個容器內部網絡IP
$ docker inspect --format='{{.NetworkSettings.IPAddress}}' mysqlmaster1172.17.0.2$ docker inspect --format='{{.NetworkSettings.IPAddress}}' mysqlmaster2172.17.0.3$ docker inspect --format='{{.NetworkSettings.IPAddress}}' mysqlslave1;172.17.0.44)確認日志位置,進行同步
查詢主庫master1的日志位置
mysql> Show?master?status?;+------------------+----------+--------------+------------------+| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |+------------------+----------+--------------+------------------+| mysql-bin.000007 | 194 | | |+------------------+----------+--------------+------------------+在master2和slave1上執行
CHANGE MASTER TO MASTER_HOST='172.17.0.2', MASTER_PORT=3306, MASTER_USER='rep', MASTER_PASSWORD='rep', MASTER_LOG_FILE='mysql-bin.000007', MASTER_LOG_POS=194;Start slave ;show slave status\G; Slave_IO_Running: Yes Slave_SQL_Running: Yes這兩個狀態為Yes,證明主從關系創建成功。
5)現在是mster2和slave1分別同步與master1同步,本次需要設置為雙主一從模式,現配置master1與master2進行同步。
Master2Mysql實例中操作
mysql> set sql_log_bin=off; ---關閉binlog寫入mysql> grant replication slave on *.* to 'rep2'@'%' identified by 'rep2';mysql> show master status;mysql> set sql_log_bin=on;mysql> show master status;+------------------+----------+--------------+------------------+| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |+------------------+----------+--------------+------------------+| mysql-bin.000005 | 234 | | |+------------------+----------+--------------+------------------+mater1Mysql實例中操作
mysql> show slave status;mysql> set sql_log_bin=off;mysql>?stop?slave;mysql> CHANGE MASTER TO MASTER_HOST='172.17.0.3', MASTER_PORT=3306, MASTER_USER='rep2', MASTER_PASSWORD='rep2', MASTER_LOG_FILE='mysql-bin.000005', MASTER_LOG_POS=234;mysql> Start slave;mysql> set sql_log_bin=on;2.4?數據驗證
???通過主機ip和映射端口訪問數據庫
master1--
$?mysql?-uroot?-p123456??-h192.168.100.75?-P33061mysql> insert into test1.tbl_test(name) values('ddd');mysql> insert into test1.tbl_test(name) values('eee');master2--
$ mysql -uroot -p123456 -h192.168.100.75 -P33062mysql> insert into test1.tbl_test(name) values('fff');mysql> insert into test1.tbl_test(name) values('ggg');slave1--
$ mysql -uroot -p123456 -h192.168.100.75 -P33063mysql> select * from test1.tbl_test;+----+------+| id | name |+----+------+| 1 | aaa || 2 | bbb || 3 | ccc || 4 | ddd || 5 | eee || 6 | fff || 7 | ggg |+----+------+7 rows in set (0.00 sec)編輯:路程
總結
以上是生活随笔為你收集整理的docker查询mysql 有哪些版本的镜像_运维有话说 | Mysql容器化主主从架构搭建的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 编程的精髓:发现问题,解决问题
- 下一篇: mysql 的自动启动 使用配置文件 /