Mysql 正在删除ibdata1文件

Mysql 正在删除ibdata1文件,mysql,innodb,Mysql,Innodb,在上一次数据库调优之后,上周我停止了mysql,但它无法重新启动 经过长时间的故障排除,我发现ibdata1文件没有它应该的那么大,它已被删除并重新创建为新文件 我从备份中检索到旧的9.5gb文件,将其替换,mysql重新启动,快乐的日子 我今天遇到了更多的服务器问题,查看了mysql文件夹,文件又消失了 我还没有停止mysql,所以一切都还在运行,我将不得不从备份中检索它,然后祈祷好运重新启动 所以我的问题是,为什么它会消失??我猜我们在My.cnf文件中做了一个意外更改,然后没有重新启动。不

在上一次数据库调优之后,上周我停止了mysql,但它无法重新启动

经过长时间的故障排除,我发现ibdata1文件没有它应该的那么大,它已被删除并重新创建为新文件

我从备份中检索到旧的9.5gb文件,将其替换,mysql重新启动,快乐的日子

我今天遇到了更多的服务器问题,查看了mysql文件夹,文件又消失了

我还没有停止mysql,所以一切都还在运行,我将不得不从备份中检索它,然后祈祷好运重新启动

所以我的问题是,为什么它会消失??我猜我们在My.cnf文件中做了一个意外更改,然后没有重新启动。不幸的是,我没有该文件的备份,因为我不知道有更改

(不整洁)My.cnf如下:

[mysqld]
local-infile=0
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql

symbolic-links=0

innodb_thread_concurrency= 4
innodb_buffer_pool_size = 2G
thread_concurrency = 3 
thread_cache_size = 32

table_cache = 1024 
query_cache_size = 64M 
query_cache_limit = 2M 
join_buffer_size = 8M 
tmp_table_size = 256M 
key_buffer = 32M 
innodb_autoextend_increment=512 
max_allowed_packet = 16M 
max_heap_table_size = 256M 
read_buffer_size = 2M 
read_rnd_buffer_size = 16M 
bulk_insert_buffer_size = 64M 
myisam_sort_buffer_size = 128M 
myisam_max_sort_file_size = 10G 
myisam_repair_threads = 1


innodb_log_file_size = 100M
innodb_additional_mem_pool_size = 20M
innodb_flush_log_at_trx_commit=2
innodb_lock_wait_timeout=1800
innodb_log_buffer_size=500K


log-error=/var/log/mysqld.log
slow_query_log = /var/log/mysql-slow.log
long_query_time = 5
pid-file=/var/run/mysqld/mysqld.pid

sort_buffer_size = 2M 
read_buffer_size = 2M
wait_timeout = 120
key_buffer = 384M
tmp_table_size = 64M

max_heap_table_size = 64M 
max_allowed_packet = 1M 
max_connections=50

query_cache_type = 1
非常感谢您的帮助


谢谢

不要停止MySQL!mysqld在运行时保持它的打开状态,因此它仍然在文件系统中。 MySQL从不删除IBMata1,所以它必须是某个外部命令

要恢复数据库并停止对数据库的所有写入,请等待主线程处于“等待服务器活动”或“睡眠”状态:

转储所有数据库(此步骤不是必需的,但为了额外的安全,请执行此步骤)

/proc
文件系统中找到已删除的ibdata1,并将其复制回MySQL datadir

# ls -la  /proc/`pidof mysqld`/fd/ | grep -e ibdata 
lrwx------ 1 root  root  64 May 26 02:41 3 -> /var/lib/mysql/ibdata1 (deleted)
注3——它是IBMData1的文件描述符

将ibdata1复制回:

# cp /proc/`pidof mysqld`/fd/3 /var/lib/mysql/ibdata1

然后重新启动MySQL

@Akuzminsky的答案是您需要做什么才能恢复当前的ibdata1。他说的没错,不管您的my.cnf配置如何,MySQL都不会删除ibdata1

因此,还有一件事是删除该文件。怎么知道呢?尝试运行Linux审计守护程序。您将无法找到上次删除文件的内容(除非您已经在运行审计守护进程),但如果再次发生这种情况,您已经准备好了


有关详细信息,请参阅此StackExchange答案:

很抱歉,我只能给出1+1的答案。它应该得到更多。
# ls -la  /proc/`pidof mysqld`/fd/ | grep -e ibdata 
lrwx------ 1 root  root  64 May 26 02:41 3 -> /var/lib/mysql/ibdata1 (deleted)
# cp /proc/`pidof mysqld`/fd/3 /var/lib/mysql/ibdata1