The newly created data directory /usr/local/mysql/data/ by --initialize is unusable. You can remove

已經是凌晨深夜,終於找到了問題。昨天晚上打算把自己源碼編譯的mysql8docker鏡像搭建一下主從複製。我使用本地目錄掛載到了mysql容器的data目錄。然後使用/usr/local/mysql/bin/mysqld --initialize-insecure --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data user=mysql 命令初始化了目錄。my.cnf配置如下:

[client]
default-character-set=utf8
#password = your_password
port = 3306
socket = /tmp/mysql.sock


[mysqld]
#sql_mode=STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION
character-set-server=utf8mb4
port = 3306
socket = /tmp/mysql.sock
basedir = /usr/local/mysql/
datadir = /usr/local/mysql/data/

skip-external-locking
key_buffer_size = 16M
max_allowed_packet = 1M
table_open_cache = 64
sort_buffer_size = 512K
net_buffer_length = 8K
read_buffer_size = 256K
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 8M
init_connect='SET NAMES utf8'

# 錯誤日誌配置
log-error = /usr/local/mysql/log/error.log
pid-file = /usr/local/mysql/run/mysql.pid

#慢日誌設置
slow_query_log=1
long_query_time=2
slow_query_log_file=/usr/local/mysql/log/slow_query.log

# bin-log二進制日誌設置
log-bin=/usr/local/mysql/log/mysqlbin/mysql-bin
# logging format: mixed|statement|row
binlog_format=statement


# 主從配置
# required unique id between 1 and 2^32 - 1 defaults to 1 if master-host is not set
server-id = 1

#Innodb配置
innodb_data_home_dir = /usr/local/mysql/data
#innodb_data_file_path = ibdata1:10M:autoextend
innodb_log_group_home_dir = /usr/local/mysql/data
# You can set .._buffer_pool_size up to 50 - 80 %
# of RAM but beware of setting memory usage too high
innodb_buffer_pool_size = 128M
innodb_additional_mem_pool_size = 10M
# Set .._log_file_size to 25 % of buffer pool size
innodb_log_file_size = 32M
innodb_log_buffer_size = 10M
innodb_flush_log_at_trx_commit = 1
innodb_lock_wait_timeout = 10


[myisamchk]
key_buffer_size = 128M
sort_buffer_size = 128M
read_buffer = 2M
write_buffer = 2M

令我意外的是mysql初始化失敗了報錯內容如下:

2020-06-26T15:58:05.081668Z 0 [ERROR] [MY-013455] [Server] The newly created data directory /usr/local/mysql/data/ by --initialize is unusable. You can remove it.
2020-06-26T15:58:05.082758Z 0 [ERROR] [MY-010119] [Server] Aborting

意思是初始化mysql的data數據目錄不可用。

在經過了一番折騰之後還是不行,google、百度很久都沒有找到解決辦法,無奈只能自己找問題。

既然是報錯的是data目錄不可用,那好,我就從這裏入手,由於docker掛載目錄是不允許刪除的,我就run了一個測試容器(無掛載目錄,無配置),然後在容器中執行初始化命令。結果初始化成功了。此時已經距離成功不遠。

我基本斷行是關於data目錄配置的關係了。想想自己設置開啓主從配置,也就修改了幾個配置項而已。有關data數據目錄也就只有bin-log的存儲位置了,如下圖所示:
問題配置項
然後我嘗試將這個配置項註釋(mysql8默認是開啓bin-log的),然後重新初始化mysql,媽耶,果然是這個配置的問題。他初始化成功了。

問題是解決了,可是爲什麼修改了bin-log目錄會失敗呢?打開官方文檔,找到關於–bin-log的配置。原文如下
在這裏插入圖片描述
只能在初始化的時候使用–bin-log 指定目錄

總結:如果有自定義my.cnf配置bin-log 目錄及文件的一定要在初始化的時候指定目錄/usr/local/mysql/bin/mysqld --log-bin=[自定義的二進制目錄]
另外需要注意的是,自定義的目錄必須先創建好,mysql初始化不會自動創建自定義的binlog目錄

/usr/local/mysql/bin/mysqld --initialize-insecure --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --log-bin=/usr/local/mysql/log/mysqlbin/mysql-bin --user=mysql
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章