Docker部署mysql 5.7
Docker部署mysql 5.7
-
準備工作
-
在CentOS或者Linux建立部署目錄,用於存放容器的配置和MySQL資料;目的是當重灌或者升級容器時,配置檔案和資料不會丟失。執行以下命令:
a、建立目錄:
mkdir -p /container/mysql
b、進入目錄:
cd /container/mysql
c、批量建立目錄:
mkdir data logs
d、更改資料夾許可權:
chmod 777 logs chmod 777 data
-
準備MySQL部署配置檔案
a、編輯MySQL配置檔案:
vim /container/mysql/my.cnf
b、寫入MySQL配置如下(可直接複製貼上):
# For advice on how to change settings please see # http://dev.mysql.com/doc/refman/5.7/en/server-configuration-defaults.html # Docker安裝最簡配置, 僅必要目錄屬性 [mysqld] pid-file= /var/run/mysqld/mysqld.pid socket= /var/run/mysqld/mysqld.sock datadir= /var/lib/mysql log-error= /var/log/mysqld-error.log slow-query-log-file= /var/log/slow-query.log # 如果使用最簡配置,則此行之後的配置可忽略 # 開啟binlog server_id=1 log_bin=mysql-bin binlog_format=ROW # 設定MySQL日誌時區和主機一樣;不設定的話預設為UTC log_timestamps=SYSTEM default_storage_engine = InnoDB performance_schema_max_table_instances = 400 table_definition_cache = 400 lower_case_table_names = 1 skip-external-locking key_buffer_size = 32M max_allowed_packet = 100G table_open_cache = 128 sort_buffer_size = 768K net_buffer_length = 4K read_buffer_size = 768K read_rnd_buffer_size = 256K myisam_sort_buffer_size = 8M thread_cache_size = 16 query_cache_size = 16M tmp_table_size = 32M sql-mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES character-set-server=utf8mb4 collation-server=utf8mb4_general_ci explicit_defaults_for_timestamp = true max_connections = 500 max_connect_errors = 100 open_files_limit = 65535 log-bin=mysql-bin binlog_format=mixed server-id = 1 expire_logs_days = 10 slow_query_log=1 long_query_time=3 early-plugin-load = "" innodb_data_file_path = ibdata1:10M:autoextend innodb_buffer_pool_size = 128M innodb_log_file_size = 64M innodb_log_buffer_size = 16M innodb_flush_log_at_trx_commit = 1 innodb_lock_wait_timeout = 50 innodb_max_dirty_pages_pct = 90 innodb_read_io_threads = 1 innodb_write_io_threads = 1 [mysqldump] quick max_allowed_packet = 500M [mysql] no-auto-rehash default-character-set=utf8mb4 [myisamchk] key_buffer_size = 32M sort_buffer_size = 768K read_buffer = 2M write_buffer = 2M [mysqlhotcopy] interactive-timeout
c、儲存退出
-
配置檔案授權:
chmod 644 /container/mysql/my.cnf
; 如果配置檔案授權為777許可權,會被MySQL忽略,導致配置檔案不生效!
-
-
執行以下命令,建立並啟動映象。如果本地沒映象,會自動拉取
docker run -itd \ --restart=always \ --name=mysql \ -p 3306:3306 \ -v /etc/timezone:/etc/timezone:ro \ -v /etc/localtime:/etc/localtime:ro \ -v /container/mysql/my.cnf:/etc/mysql/my.cnf \ -v /container/mysql/data:/var/lib/mysql \ -v /container/mysql/logs:/var/log \ -e MYSQL_ROOT_PASSWORD="root" \ mysql:5.7
命令分析:
- docker run #建立並啟動應用
- -itd #-i:開啟容器的標準輸入STDIN;-t:容器分配偽終端,用於再終端登入容器;-d:後臺執行容器
- --restart=always #在容器退出時總是重啟容器
- --name="mysql" #容器名稱
- -p 3306:3306 #對映主機指定埠到容器的指定埠;冒號前為主機埠,冒號後為容器埠
- -v /etc/timezone:/etc/timezone:ro #使容器時間與主機時區保持一致;ro的意思是隻讀(read-only)模式,可以保證其掛載卷不被 Docker 容器內部檔案系統配置所覆蓋。
- -v /etc/localtime:/etc/localtime:ro #使容器時間與主機時間保持一致;
- -v /container/mysql/data:/var/lib/mysql #掛載主機指定目錄到容器的指定目錄;冒號前為主機目錄;掛載的主機目錄必須授權777許可權
- -e MYSQL_ROOT_PASSWORD="root" #增加環境變數MYSQL_ROOT_PASSWORD,mysql容器建立並啟動時,自動設定mysql的登入密碼
- mysql:5.7 #要建立並啟動容器的mysql映象
備註:以下引數格式寫法等價:
--restart always
--restart "always"
--restart=always
--restart="always"
同理,--name 等寫法一樣
指令碼執行後:
檢視容器資訊:
docker ps -a
檢視MySQL日誌:
docker logs mysql
-
測試連線登入
此時,一般可以使用navicat等工具進行資料庫連線了;如果工具連線不上,可在終端測試連線並授權;命令如下:
進入docker容器MySQL終端:
docker exec -it mysql bash
MySQL登入:
mysql -uroot -p'root'
MySQL遠端登入授權:
grant all privileges on *.* to 'root'@'%' identified by 'root';
重新整理生效:
flush privileges;
最後再次使用navicat工具連線測試即可。