1. 程式人生 > 其它 >Docker部署mysql 5.7

Docker部署mysql 5.7

Docker部署mysql 5.7

  1. 準備工作

    • 在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忽略,導致配置檔案不生效!

  2. 執行以下命令,建立並啟動映象。如果本地沒映象,會自動拉取

    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

  3. 測試連線登入

    此時,一般可以使用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工具連線測試即可。