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