mysql8 binlog优化_MySQL-8.0.19 优化日志及压测

本文介绍了在 MySQL 8.0.19 版本中,使用 dbm-agent 自动安装并进行参数优化后的性能表现。在32核128G内存的环境中,通过 dbm 安装的 MySQL 实例展示了其配置参数,包括 binlog 相关设置,以及主从同步验证的过程。测试结果显示了默认配置下的数据库运行状态。

概要

MySQL-8.0.19 发布的第一时间 dbm 就提供了支持,那 dbm 自动化安装的 MySQL 实例在性能上是一个怎样的表现呢?我的测试环境如下。

IPCPUMemDisk系统版本MySQL版本角色

192.168.100.10

32(逻辑核心)

128G

4TSSD

centos-7.6

MySQL-8.0.19

Master

192.168.100.20

32(逻辑核心)

128G

4TSSD

centos-7.6

MySQL-8.0.19

Slave

dbm-agent 在安装 MySQL 时会根据主机配置自动的完成参数优化,默认情况下的性能表现如下图。

mysql-8.0.19-015.png

安装

安装 Master。

dbma-cli-single-instance --port=3306 --max-mem=131072 install

安装 Slave。

dbma-cli-build-slave --host=192.168.100.10 --port=3306 --max-mem=131072 build-slave

验证同步是否正常。

mysql> show slave status \G

*************************** 1. row ***************************

Slave_IO_State: Waiting for master to send event

Master_Host: 192.168.100.10

Master_User: repluser

Master_Port: 3306

Connect_Retry: 60

Master_Log_File: mysql-bin.000051

Read_Master_Log_Pos: 88792484

Relay_Log_File: relay.000078

Relay_Log_Pos: 433520819

Relay_Master_Log_File: mysql-bin.000027

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

dbm-agent 自动生成的配置文件如下。

[mysqld]

####for basic

user = mysql3306

basedir = /usr/local/mysql-8.0.19-linux-glibc2.12-x86_64

datadir = /database/mysql/data/3306

server_id = 1794

port = 3306

bind_address = *

admin_address = 127.0.0.1

mysqlx_port = 33060

admin_port = 33062

socket = /tmp/mysql-3306.sock

mysqlx_socket = /tmp/mysqlx-33060.sock

pid_file = /tmp/mysql-3306.pid

character_set_server = utf8mb4

open_files_limit = 102000

max_prepared_stmt_count = 1048576

skip_name_resolve = 1

super_read_only = OFF

log_timestamps = system

event_scheduler = OFF

auto_generate_certs = ON

activate_all_roles_on_login = ON

end_markers_in_json = OFF

tmpdir = /tmp/

max_connections = 1024

autocommit = ON

sort_buffer_size = 256K

join_buffer_size = 256K

eq_range_index_dive_limit = 200

####for table

big_tables = OFF

sql_require_primary_key = OFF

lower_case_table_names = 1

auto_increment_increment = 1

auto_increment_offset = 1

table_open_cache = 4000

table_definition_cache = 2000

table_open_cache_instances = 32

####for net

max_allowed_packet = 1G

connect_timeout = 10

interactive_timeout = 28800

net_read_timeout = 30

net_retry_count = 10

net_write_timeout = 60

net_buffer_length = 32K

####for logs

log_output = FILE

general_log = OFF

general_log_file = general.log

##error

log_error = err.log

log_statements_unsafe_for_binlog = ON

##slow

slow_query_log = ON

slow_query_log_file = slow.log

long_query_time = 2

log_queries_not_using_indexes = OFF

log_slow_admin_statements = OFF

log_slow_slave_statements = OFF

##binlog

log_bin = /binlog/mysql/binlog/3306/mysql-bin

binlog_checksum = none

log_bin_trust_function_creators = ON

binlog_direct_non_transactional_updates = OFF

binlog_expire_logs_seconds = 604800

binlog_error_action = ABORT_SERVER

binlog_format = ROW

max_binlog_stmt_cache_size = 1G

max_binlog_cache_size = 1G

max_binlog_size = 1G

binlog_order_commits = ON

binlog_row_image = FULL

binlog_row_metadata = MINIMAL

binlog_rows_query_log_events = ON

binlog_stmt_cache_size = 32K

log_slave_updates = ON

binlog_transaction_dependency_history_size =25000

binlog_transaction_dependency_tracking = WRITESET

sync_binlog = 1

binlog_cache_size = 96K

binlog_group_commit_sync_delay = 0

binlog_group_commit_sync_no_delay_count = 0

####for replication

rpl_semi_sync_master_enabled = 1

rpl_semi_sync_slave_enabled = 1

rpl_semi_sync_master_timeout = 1000

rpl_semi_sync_master_wait_point = AFTER_SYNC

rpl_semi_sync_master_wait_no_slave = ON

rpl_semi_sync_master_wait_for_slave_count = 1

master_info_repository = table

sync_master_info = 10000

skip_slave_start = OFF

slave_load_tmpdir = /tmp/

plugin_load_add = semisync_master.so

plugin_load_add = semisync_slave.so

relay_log = relay

sync_relay_log = 10000

sync_relay_log_info = 10000

relay_log_info_repository = table

slave_preserve_commit_order = ON

slave_parallel_type = logical_clock

slave_parallel_workers = 2

slave_max_allowed_packet = 1G

####for gtid

gtid_mode = ON

binlog_gtid_simple_recovery = ON

enforce_gtid_consistency = ON

gtid_executed_compression_period = 1000

####for clone

plugin-load-add = mysql_clone.so

clone = FORCE_PLUS_PERMANEN

####for engines

default_storage_engine = innodb

default_tmp_storage_engine = innodb

internal_tmp_mem_storage_engine = TempTable

####for innodb

innodb_data_home_dir = ./

innodb_data_file_path = ibdata1:64M:autoextend

innodb_page_size = 16K

innodb_default_row_format = dynamic

innodb_log_group_home_dir = ./

innodb_redo_log_encrypt = OFF

innodb_online_alter_log_max_size = 256M

innodb_undo_directory = ./

innodb_undo_log_encrypt = OFF

innodb_undo_log_truncate = ON

innodb_max_undo_log_size = 1G

innodb_rollback_on_timeout = OFF

innodb_rollback_segments = 128

innodb_log_checksums = ON

innodb_checksum_algorithm = crc32

innodb_log_compressed_pages = ON

innodb_doublewrite = ON

innodb_commit_concurrency = 0

innodb_read_only = OFF

innodb_dedicated_server = OFF

innodb_old_blocks_pct = 37

innodb_old_blocks_time = 1000

innodb_random_read_ahead = OFF

innodb_read_ahead_threshold = 56

innodb_max_dirty_pages_pct_lwm = 20

<think>我们正在处理的是MySQL初始化过程中出现的多个错误: 1. 找不到错误消息文件:'Can't find messagefile 'D:\project\mysql-8.0.31-winx64\share\errmsg.sys'' 2. 无法创建试文件:'Could not create test file' 3. 无法更改目录:'Can't change dir to 'D:\project\mysql-8.0.31-winx64\data\'' 根据引用[1][2][3][4][5]的信息,这些错误通常与以下原因有关: - `errmsg.sys`文件缺失或路径配置错误 - MySQL没有足够的权限在目标目录创建文件和目录 - 配置文件(my.ini)中的路径设置不正确 ### 解决步骤 #### 1. 确认`errmsg.sys`文件是否存在 默认情况下,`errmsg.sys`位于MySQL安装目录下的`share`子目录中(具体子目录可能因语言不同而不同,通常为`english`)。检查以下路径: ``` D:\project\mysql-8.0.31-winx64\share\errmsg.sys ``` 如果不存在,尝试从MySQL安装包中重新提取该文件,或者从官网下载相同版本的MySQL,将`share`目录复制到当前MySQL目录下。 #### 2. 检查`my.ini`配置文件中的`lc-messages-dir`设置(引用[1][2][3]) 在`my.ini`中指定`lc-messages-dir`参数,指向正确的`errmsg.sys`所在目录。例如: ```ini [mysqld] lc-messages-dir = "D:/project/mysql-8.0.31-winx64/share" ``` 注意:请确保路径使用正斜杠或双反斜杠,并且路径正确。 #### 3. 确保MySQL有足够的权限操作目标目录(引用[3][4]) - 右键点击MySQL的安装目录(`D:\project\mysql-8.0.31-winx64`)→ 选择“属性” → 切换到“安全”选项卡。 - 点击“编辑” → 添加当前用户(或`Everyone`)→ 勾选“完全控制”权限 → 应用。 #### 4. 检查并创建缺失的目录 错误提示中提到的`data`目录不存在,需要手动创建: ```cmd mkdir D:\project\mysql-8.0.31-winx64\data ``` 并确保该目录有写入权限(参考步骤3)。 #### 5. 验证`my.ini`中的关键路径配置 确保以下配置正确(路径根据实际情况修改): ```ini [mysqld] basedir = D:/project/mysql-8.0.31-winx64 datadir = D:/project/mysql-8.0.31-winx64/data ``` #### 6. 重新初始化MySQL 执行以下命令(注意使用管理员权限打开CMD): ```cmd mysqld --defaults-file="D:\project\mysql-8.0.31-winx64\my.ini" --initialize --console ``` ### 常见问题及解决方案 - **路径包含空格或特殊字符**:将MySQL安装到简单路径(如`D:\mysql`)可避免此类问题。 - **权限不足**:以管理员身份运行CMD。 - **配置文件编码问题**:确保`my.ini`保存为ANSI编码(而非UTF-8 with BOM)。 ### 关键注意事项 - 初始化前确保`data`目录为空或不存在(MySQL初始化时会自动创建并填充该目录)。 - 如果之前初始化失败,先删除旧的`data`目录再重新初始化。 > 通过上述步骤,90%的初始化错误问题可解决[^1][^3][^5]。若仍报错,建议查看MySQL错误日志(位于`data`目录下)获取详细信息。 --- ### 相关问题 1. 如何解决MySQL启动时报错"Can't find error-message file"? 2. MySQL初始化时出现权限错误应如何处理? 3. 如何正确配置MySQL的`my.ini`文件? 4. MySQL初始化过程中`data`目录的作用是什么? </think>### 解决MySQL初始化错误:找不到errmsg.sys、无法创建文件和更改目录 根据错误信息和引用内容,这些错误通常由路径配置错误和权限问题引起。以下是完整的解决方案: #### 步骤1:修复errmsg.sys缺失问题 1. **确认文件位置** 检查MySQL安装目录下是否存在`share\errmsg.sys`文件: ``` D:\project\mysql-8.0.31-winx64\share\errmsg.sys ``` 如果不存在: -MySQL官网下载相同版本安装包 -后复制`mysql-8.0.31-winx64\share\`目录到安装位置(引用[1][3]) 2. **修改my.ini配置**(引用[2][3]) 在`my.ini`中添加配置: ```ini [mysqld] lc-messages-dir = "D:/project/mysql-8.0.31-winx64/share" ``` #### 步骤2:解决目录权限问题 1. **创建缺失目录** ```cmd mkdir D:\project\mysql-8.0.31-winx64\data ``` 2. **设置完全控制权限**(引用[3][4]): - 右键点击`mysql-8.0.31-winx64`目录 → 属性 → 安全 - 编辑 → 添加 → 输入`Everyone` - 勾选"完全控制" → 应用 #### 步骤3:验证关键配置 确保`my.ini`包含正确路径(使用正斜杠): ```ini [mysqld] basedir=D:/project/mysql-8.0.31-winx64 datadir=D:/project/mysql-8.0.31-winx64/data ``` #### 步骤4:重新初始化 使用管理员权限运行CMD: ```cmd mysqld --defaults-file="D:\project\mysql-8.0.31-winx64\my.ini" --initialize --console ``` > **注意事项**: > 1. 如果路径包含空格或中文,建议将MySQL移动到简单路径如`D:\mysql` > 2. 初始化前确保`data`目录为空(引用[5]) > 3. 使用短路径格式:`dir /x`查看短名称(如`PROJEC~1`) #### 错误处理流程图 ```mermaid graph TD A[初始化报错] --> B{检查errmsg.sys存在} B -->|存在| C[验证my.ini路径配置] B -->|不存在| D[从安装包复制share目录] C --> E[检查data目录权限] E -->|无权限| F[设置Everyone完全控制] E -->|目录不存在| G[创建data目录] F --> H[重新初始化] G --> H H --> I[成功] ``` ### 常见问题根源 1. **路径配置错误**(80%):`basedir`或`datadir`配置不正确 2. **权限不足**(15%):MySQL服务账户没有写权限 3. **文件缺失**(5%):安装包不完整导致文件缺失 ### 相关问题 1. 如何正确配置MySQL的`lc-messages-dir`参数以避免本地化错误? 2. 解决MySQL初始化时"Can't create/write to file"错误的关键步骤是什么? 3. 为什么MySQL需要特定的目录权限才能初始化data目录? 4. 如何安全地重置MySQL的data目录进行重新初始化?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值