-
准备工作
-
在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工具连接测试即可。