当前位置:首页 > 技术 > 正文内容

基于Docker容器化部署MySQL 5.7实例指南

访客 技术 2026年10月9日 2

环境初始化与容器构建

部署前需规划独立的数据持久化路径与参数配置文件。以下脚本将清理历史实例,创建挂载目录,并拉取定制化的数据库配置。

# 定义运行参数与路径映射
DB_CONTAINER="mysql_core_v57"
HOST_PORT=3316
DATA_VOLUME="/srv/docker_volumes/mysql57"
CNF_PATH="/etc/custom/mysql57_tuning.cnf"

# 清理旧环境并创建持久化目录
docker rm -f "$DB_CONTAINER" &>/dev/null
mkdir -p "$DATA_VOLUME"

# 获取优化后的配置模板(请替换为实际可用的内网或公网源)
curl -sSL https://config.example.com/mysql57/base.cnf -o "$CNF_PATH"

# 启动容器实例并保持后台存活
docker run -d \
  --name "$DB_CONTAINER" \
  -p "$HOST_PORT":3306 \
  --restart unless-stopped \
  -v "$DATA_VOLUME:/var/lib/mysql" \
  -v "$CNF_PATH:/etc/mysql/conf.d/override.cnf:ro" \
  mysql:5.7 tail -f /dev/null

执行数据目录初始化

容器启动后,需对挂载的存储卷执行首次初始化,生成系统表结构与基础凭证。此处采用非安全模式初始化,以便后续手动配置账户权限。

docker exec "$DB_CONTAINER" mysqld --initialize-insecure

服务启动与远程权限配置

初始化完成后,手动拉起 MySQL 守护进程,并通过交互式 SQL 终端设置管理员密码及开放外部网络访问。

# 启动数据库服务进程
docker exec -d "$DB_CONTAINER" mysqld --user=root

# 配置密码并授予远程连接权限
docker exec -it "$DB_CONTAINER" mysql -u root <<'EOF'
SET GLOBAL read_only = OFF;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'SecureDB@2024' WITH GRANT OPTION;
FLUSH PRIVILEGES;
EOF

核心参数配置文件参考

以下为分类整理的生产级配置项,涵盖连接控制、存储引擎调优、缓存策略及日志监控等模块。实际部署时可依据宿主机物理资源调整内存相关阈值。

[mysqld]
# ================= 基础网络与连接控制 =================
port                    = 3306
max_connections         = 3000
max_connect_errors      = 100
connect_timeout         = 10
wait_timeout            = 86400
interactive_timeout     = 7200
back_log                = 3000
net_read_timeout        = 30
net_write_timeout       = 60
net_retry_count         = 10
net_buffer_length       = 16384
max_allowed_packet      = 1024M
lower_case_table_names  = 1
character_set_server    = utf8
skip_external_locking   = 1
symbolic-links          = 0

# ================= InnoDB 存储引擎调优 =================
default_storage_engine  = InnoDB
innodb_buffer_pool_size = 2G
innodb_buffer_pool_instances = 1
innodb_log_compressed_pages = OFF
innodb_flush_method     = O_DIRECT
innodb_flush_neighbors  = 1
innodb_flush_sync       = ON
innodb_io_capacity      = 20000
innodb_io_capacity_max  = 40000
innodb_lru_scan_depth   = 1024
innodb_page_cleaners    = 1
innodb_write_io_threads = 4
innodb_read_io_threads  = 4
innodb_purge_threads    = 1
innodb_purge_batch_size = 300
innodb_purge_rseg_truncate_frequency = 128
innodb_max_dirty_pages_pct = 75
innodb_max_dirty_pages_pct_lwm = 0
innodb_thread_concurrency = 0
innodb_sync_array_size  = 1
innodb_spin_wait_delay  = 6
innodb_adaptive_flushing = ON
innodb_adaptive_flushing_lwm = 10
innodb_adaptive_max_sleep_delay = 150000
innodb_adaptive_hash_index = ON
innodb_checksum_algorithm = crc32
innodb_log_checksums    = ON
innodb_lock_wait_timeout = 3600
innodb_deadlock_detect  = ON
innodb_rollback_on_timeout = OFF
innodb_rollback_segments = 128
innodb_commit_concurrency = 0
innodb_concurrency_tickets = 5000
innodb_open_files       = 3000
innodb_file_per_table   = ON
innodb_status_output    = OFF
innodb_status_output_locks = OFF
innodb_print_all_deadlocks = OFF
innodb_strict_mode      = OFF
innodb_sort_buffer_size = 1048576
innodb_online_alter_log_max_size = 134217728
innodb_change_buffer_max_size = 25
innodb_change_buffering = all
innodb_autoinc_lock_mode = 2
innodb_autoextend_increment = 64
innodb_large_prefix     = OFF
innodb_compression_level = 6
innodb_compression_failure_threshold_pct = 5
innodb_compression_pad_pct_max = 50
innodb_disable_sort_file_cache = ON
innodb_random_read_ahead = OFF
innodb_read_ahead_threshold = 56
innodb_old_blocks_time  = 1000
innodb_old_blocks_pct   = 37
innodb_undo_log_truncate = OFF
innodb_max_undo_log_size = 1073741824
innodb_ft_total_cache_size = 640000000
innodb_ft_cache_size    = 8000000
innodb_ft_max_token_size = 84
innodb_ft_min_token_size = 3
innodb_ft_enable_stopword = ON
innodb_ft_enable_diag_print = OFF
innodb_ft_num_word_optimize = 2000
innodb_ft_result_cache_limit = 2000000000
innodb_cmp_per_index_enabled = OFF

# ================= 查询优化器与缓存策略 =================
query_cache_type        = 0
query_cache_size        = 3145728
query_cache_limit       = 1048576
query_cache_min_res_unit = 1024
join_buffer_size        = 352KB
sort_buffer_size        = 704KB
read_buffer_size        = 704KB
max_heap_table_size     = 67108864
tmp_table_size          = 2097152
table_open_cache        = 2000
table_open_cache_instances = 16
table_definition_cache  = 512
open_files_limit        = 65535
thread_stack            = 262144
thread_cache_size       = 256
max_prepared_stmt_count = 16382
preload_buffer_size     = 32768
key_cache_block_size    = 1024
key_cache_age_threshold = 300
key_cache_division_limit = 100
optimizer_prune_level   = 1
optimizer_search_depth  = 62
eq_range_index_dive_limit = 10
range_alloc_block_size  = 4096
range_optimizer_max_mem_size = 8388608
max_sort_length         = 1024
max_seeks_for_key       = 18446744073709500000
max_length_for_sort_data = 1024
max_points_in_geometry  = 65536
div_precision_increment = 4
default_week_format     = 0
group_concat_max_len    = 1024
optimizer_trace_limit   = 1
optimizer_trace_offset  = -1
optimizer_trace_max_mem_size = 16384
show_compatibility_56   = OFF
show_old_temporals      = OFF
host_cache_size         = 644
metadata_locks_cache_size = 1024
performance_schema      = OFF

# ================= 事务隔离与 SQL 模式 =================
transaction_isolation   = READ-COMMITTED
autocommit              = ON
sql_mode                = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
explicit_defaults_for_timestamp = OFF
disconnect_on_expired_password = ON
local_infile            = ON
event_scheduler         = ON
updatable_views_with_limit = YES
delay_key_write         = ON
delayed_queue_size      = 1000
delayed_insert_limit    = 100
delayed_insert_timeout  = 300
concurrent_insert       = 1

# ================= 二进制日志与复制同步 =================
log_bin                 = ON
log_bin_use_v1_row_events = 1
binlog_checksum         = CRC32
binlog_rows_query_log_events = OFF
binlog_cache_size       = 128KB
max_binlog_cache_size   = 18446744073709547520
binlog_stmt_cache_size  = 32768
max_binlog_stmt_cache_size = 18446744073709547520
binlog_row_image        = full
binlog_order_commits    = ON
sync_master_info        = 10000
sync_relay_log_info     = 10000
slave_net_timeout       = 60
slave_parallel_type     = LOGICAL_CLOCK
slave_type_conversions  =
master_verify_checksum  = OFF

# ================= 监控日志与插件开关 =================
slow_query_log          = ON
slow_launch_time        = 2
long_query_time         = 1
log_queries_not_using_indexes = OFF
log_throttle_queries_not_using_indexes = 0
log_error_verbosity     = 2
log_slow_admin_statements = OFF
general_log             = OFF
innodb_monitor_enable   =
innodb_monitor_disable  =
loose_innodb_numa_interleave = ON
loose_innodb_rds_faster_ddl = ON
loose_thread_pool_size  = 1
loose_thread_pool_enabled = OFF
loose_thread_pool_oversubscribe = 32
loose_validate_password_policy = 1
loose_validate_password_length = 8
loose_validate_password_mixed_case_count = 1
loose_validate_password_number_count = 1
loose_validate_password_special_char_count = 1
loose_performance_schema_max_table_instances = 1000
loose_performance_schema_max_index_stat = 10000
loose_performance_schema_max_prepared_statements_instances = 1000
loose_performance_schema_max_socket_instances = 1000
loose_performance_schema_max_rwlock_instances = 10000
loose_performance_schema_max_cond_instances = 10000
loose_performance_schema_max_table_lock_stat = 10000
loose_performance_schema_max_table_handles = 10000
loose_performance_schema_accounts_size = 10000
loose_performance_schema_hosts_size = 10000
loose_performance_schema_users_size = 10000
loose_performance_schema_setup_actors_size = 10000
loose_performance_schema_setup_objects_size = 10000
loose_performance_schema_max_metadata_locks = 10000
loose_performance_schema_max_mutex_instances = 10000
loose_performance_schema_max_program_instances = 10000
loose_performance_schema_max_thread_instances = 10000
loose_performance_schema_digests_size = 10000
loose_performance_schema_max_file_instances = 1000
loose_performance_point_iostat_interval = 2
loose_performance_point_iostat_volume_size = 10000
loose_performance_point_lock_rwlock_enabled = ON
loose_ccl_queue_bucket_count = 4
loose_ccl_queue_bucket_size = 64
loose_innodb_data_file_purge = ON
loose_innodb_data_file_purge_interval = 100
loose_innodb_data_file_purge_max_size = 512
loose_rds_kill_connections = 20
loose_rds_audit_max_sql_size = 2048
loose_rds_set_connection_id_enabled = ON
loose_rds_check_core_file_enabled = ON
loose_opt_rds_last_error_gtid = ON
loose_opt_rds_enable_show_slave_lag = ON
loose_optimizer_trace = enabled=off,one_line=off
loose_optimizer_switch = index_merge=on,index_merge_union=on,index_merge_sort_union=on,index_merge_intersection=on,engine_condition_pushdown=on,index_condition_pushdown=on,mrr=on,mrr_cost_based=on,block_nested_loop=on,batched_key_access=off,materialization=on,semijoin=on,loosescan=on,firstmatch=on,subquery_materialization_cost_based=on,use_index_extensions=on
loose_max_execution_time = 0
loose_sql_safe_updates = OFF
loose_innodb_log_optimize_ddl = OFF
loose_innodb_stats_sample_pages = 8
loose_innodb_stats_persistent_sample_pages = 20
loose_innodb_stats_transient_sample_pages = 8
loose_innodb_stats_auto_recalc = ON
loose_innodb_stats_persistent = ON
loose_innodb_stats_on_metadata = OFF
loose_innodb_stats_method = nulls_equal
loose_max_statement_time = 0
loose_validate_password_check_user_name = ON
loose_mysql_native_password_proxy_users = OFF
loose_sha256_password_proxy_users = OFF
character_set_filesystem = binary
tls_version = TLSv1,TLSv1.1,TLSv1.2
end_markers_in_json = OFF
innodb_ft_sort_pll_degree = 2
ngram_token_size = 2
ft_max_word_len = 84
ft_min_word_len = 4
ft_query_expansion_limit = 20
lc_time_names = en_US
default_time_zone = +8:00
old_passwords = 0
stored_program_cache = 256
myisam_sort_buffer_size = 262144
table_open_cache_instances = 16
transaction_alloc_block_size = 8192
transaction_prealloc_size = 4096
query_alloc_block_size = 8192
query_prealloc_size = 8192
auto_increment_increment = 1
auto_increment_offset = 1
block_encryption_mode = "aes-128-ecb"
min_examined_row_limit = 0
max_sp_recursion_depth = 0
low_priority_updates = 0
flush_time = 0
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql

相关文章

Linux crontab 详解

1) crontab 是什么cron 是 Linux 的定时任务守护进程;crontab 是用来编辑/查看“按时间周期执行命令”的表(cron table)。常见两类:用户 crontab:每个用户一份(crontab -e 编辑)系统级 crontab / cron.d:可指定执行用户(/etc/crontab、/etc/cron.d/*)2) crontab 时间...

富文本里可以允许的 HTML 属性

一、所有标签默认允许的安全属性(极少)class        (可选)id           (通常建议禁用)title️ 注意:id 容易被滥用做锚点注入,很多系统直接禁用class 允许的话最好只允许固定前缀(如 editor-*)二、a 标签允许属性<a href="" t...

Mac 安装 Node.js 指南

方法一:通过官网安装包(最简单,适合初学者)如果你只是想快速安装并开始使用,这是最直接的方法。访问 Node.js 官网。页面会显示两个版本:LTS (Recommended For Most Users):长期支持版,最稳定。建议选这个。Current:最新特性版,包含最新功能但可能不够稳定。下载 .pkg 安装包并运行。按照安装向导点击“下一步”即可完成。方法二:使用 Homebrew 安装(...

Dom\HTML_NO_DEFAULT_NS 的副作用:自动加闭合标签

在使用Dom\HTMLDocument时,Dom\HTML_NO_DEFAULT_NS 将禁止在解析过程中设置元素的命名空间, 此设置是为了与DOMDocument向后兼容而存在的。当使用它时,已知的一个副作用就是:自动加闭合标签例如 </img> 为什么会这样?当你使用:Dom\HTML_NO_DEFAULT_NS文档会变成 无命名空间模式,此时内部更接近 XML...

Laravel 事件和监听器创建

在 Laravel 中,使用 Artisan 命令创建 Events(事件) 和 Listeners(监听器) 是非常高效的。你可以通过以下几种方式来实现:1. 手动创建单个 Event如果你只想创建一个事件类,可以使用 make:event 命令:Bashphp artisan make:event UserRegistered执行后,文件将生成在 app/Even...

自定义域名解析神器 dnsmasq

什么是 dnsmasq?dnsmasq 是一个轻量级、功能强大的网络服务工具,专为小型和中等规模网络设计。它是一个综合的网络基础设施解决方案[1]。dnsmasq 能做什么?功能说明应用场景DNS 转发与缓存将 DNS 查询转发到上游服务器(ISP、Google DNS 等),并在本地缓存结果加快 DNS 查询速度,减少外部 DNS 流量本地 DNS解析本地网络设备的主机名,无需编辑&n...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。