操作前首先要准备重装mysql:在/etc/mysql/mysql.conf.d下的mysqld.cnf中配置[mysqld]innodb_force_recovery=1设置值1对1,如果1不能成功开始,则逐渐增加到2/3/4等。untilmysql可以启动,正常情况下,应该可以启动到3。如果启动了,先备份数据库,最好重新安装mysql,因为虽然启动了,但是访问项目的时候第一次,第二次再访问,会报数据库错误。当然你也可以试试网上的方法。方法在文末。无论如何,我失败了。这里说一下卸载数据库。首先在终端查看mysql依赖:dpkg--list|grepmysql然后执行sudoaptpurgemysql-*sudorm-rf/etc/mysql//var/lib/mysqlsudoaptautoremovesudoaptautoclean在执行命令dpkg--list|grepmysql查看mysql下的依赖,php-mysql就行了。参考链接:记住服务器崩溃后数据库恢复的过程。Ubuntu18.04彻底删除了MySQL数据库。链接内容无效,直接看下面,我复制过来了---------------------------------------------------这里我复制了参考链接的内容。第一种方法是卸载mysql。首先,检查终端中的MySQL依赖项:dpkg--list|grepmysql卸载:sudoapt-getremovemysql-common卸载:sudoapt-getautoremove--purgemysql-server-5.7清除残留数据:dpkg-l|grep^rc|awk'{print$2}'|sudoxargsdpkg-P再次查看MySQL的剩余依赖:dpkg--list|grepmysql继续删除剩余的依赖,如:sudoapt-getautoremove--purgemysql-apt-config至此,没有MySQL的依赖,彻底删除,GoodLuck链接:https://blog.csdn.net/iehadoo...第二种方法是我写的mysql无法启动。现象很简单。数据库服务器宕机了,当然是在数据库服务没有停止的情况下。机器重启重启后,mysql服务,:1709200:30:17Innodb:线程140107687212800在File/export/home/home/pb2/pb2/build/sb_0-26296600-129139913999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999.5/5/5/5/5/5/5/5/5/5/5/5/MM.5/MM。10/storage/innobase/include/fut0lst.ic第83行InnoDB:断言失败:addr.page==FIL_NULL||addr.boffset>=FIL_PAGE_DATAInnoDB:我们故意生成一个内存陷阱。InnoDB:向http://bugs.mysql.com提交详细的错误报告。InnoDB:如果你重复断言失败或崩溃,甚至InnoDB:在mysqld启动后立即,可能存在InnoDB:InnoDB表空间中的损坏。请参考InnoDB:http://dev.mysql.com/doc/refman/5.1/en/forcing-recovery.htmlInnoDB:aboutforcingrecovery.1709200:30:17-mysqldgotsignal6;Thiscouldbebecauseyouhit一个错误。也有可能是这个二进制文件或它所链接的库之一已损坏、构建不当或配置错误。此错误也可能是由硬件故障引起的。我们将尝试您最好收集一些有助于诊断问题的信息,但由于我们已经崩溃,肯定有问题,这可能会失败。key_buffer_size=16777216read_buffer_size=262144max_used_connections=0max_threads=500thread_count=0connection_count=0mysqld可能会用完key_buffer_size+(read_buffer_size+sort_buffer_size)*max_threads=406067KB内存希望没问题;如果不是,减少等式中的一些变量。thd:0x0Attemptingbacktrace。您可以使用以下信息找出mysqld死机的地方。如果在此之后您没有看到任何消息,则说明出现了严重错误...stack_bottom=(nil)thread_stack0x40000/usr/local/mysql/bin/mysqld(my_print_stacktrace+0x39)[0x916839]/usr/local/mysql/bin/mysqld(handle_segfault+0x359)[0x4fc0d9]/lib64/libpthread.so.0(+0xf4a0)[0x7f6d5ca9f4a0]/lib64/libc.so.6(gsignal+0x35)[0x7f6d5be4a885]/lib64/libc.so.6(中止+0x175)[0x7f6d5be4c065]/usr/local/mysql/bin/mysqld[0x7d5601]/usr/local/mysql/bin/mysqld[0x7ca012]/usr/local/mysql/bin/mysqld[0x7ca357]/usr/local/mysql/bin/mysqld[0x7cce1a]/usr/local/mysql/bin/mysqld[0x7b89e8]/usr/local/mysql/bin/mysqld[0x78d97d]/usr/local/mysql/bin/mysqld(_Z24ha_initialize_handlertonP13st_plugin_int+0x48)[0x6683a8]/usr/local/mysql/bin/mysqld[0x57ddba]/usr/local/mysql/bin/mysqld(_Z11plugin_initPiPPci+0xb5d)[0x581cbd]/usr/local/mysql/bin/mysqld[0x50212c]/usr/local/mysql/bin/mysqld(_Z11mysqld_mainiPPc+0x3c2)[0x504742]/lib64/libc.so.6(__libc_start_main+0xfd)[0x7f6d5be36cdd]/usr/local/mysql/bin/mysqld[0x4fa3fa]手册页在http://dev.mysql.com/doc/mysql/en/crashing.html包含的信息应该可以帮助您找出导致崩溃的原因。17092000:30:17mysqld_safemysqld来自pid文件/usr/local/mysql/data/localhost.localdomain.pidended17092001:04:55mysqld_safe启动mysqld守护进程数据库来自/usr/local/mysql/data1709201:04:55[警告]忽略你serchangeto'ser=mysql'becausetheuserwassetto'mysql'becausetheuserwassetto'mysql'becausetheuserwassetto'mysql'earlieronthecommandline在解决过程的开始,重点是这个日志:Itispossiblethatmysqldcoulduseuptokey_buffer_size+(read_buffer_size+sort_buffer_size)*max_threads=406067KB内存希望没问题;如果不是,减少等式中的一些变量。我以为是mysql的一些参数设置的问题,结合google结果,修改了/etc/my.cnf,但是还是没有结果问题解决后想想,因为之前mysql运行正常,所以有一般配置没有问题。ForcingInnoDBRecovery设置recovery模式启动mysql,在/etc/my.cnf中添加如下配置:[mysqld]innodb_force_recovery=1其中后面的值设置为1,如果1无法启动成功,则逐渐增加到2/3/4等待。直到mysql可以启动!!!ForcingInnoDBRecovery提供了6个级别的修复模式。需要注意的是,当该值大于3时,会对数据文件造成永久性损坏,无法恢复。六个等级别的介绍摘要如下:(SRV_FORCE_IGNORE_CORRUPT)让服务器运行,即使它检测到损坏的页面。尝试使SELECT*FROMtbl_name跳过损坏的索引记录和页面,这有助于转储表。(SRV_FORCE_NO_BACKGROUND)防止主线程和任何清除线程运行。如果在清除操作期间发生崩溃,此恢复值将阻止它。(SRV_FORCE_NO_TRX_UNDO)崩溃恢复后不运行事务回滚。(SRV_FORCE_NO_IBUF_MERGE)防止插入缓冲区合并操作。如果它们会导致崩溃,则不执行它们。不计算表统计信息。此值可能会永久损坏数据文件。使用此值后,准备好删除并重新创建所有二级索引。(SRV_FORCE_NO_UNDO_LOG_SCAN)启动数据库时不查看撤消日志:InnoDB甚至将未完成的事务视为已提交。该值可以永久损坏数据文件。(SRV_FORCE_NO_LOG_REDO)不做重做og与恢复相关的前滚。此值可能会永久损坏数据文件。使数据库页面处于过时状态,这反过来可能会给B树和其他数据库结构带来更多损坏。以recovery模式启动mysql/usr/local/mysql/bin/mysqld_safe-user=mysql&重启成功后,测试是否可以正常连接数据库:mysql-uroot-p123456databackuprecoverymode数据库当然是只读的,它与恢复水平有关。现在要做的就是备份数据库数据,然后清除之前的错误数据,最后从备份数据中恢复。mysqldump-uroot-p123456--all-databases>all_mysql_backup.sql在原始数据清洗或备份清洗数据之前需要停止数据库服务。备份数据库的数据目录,相当于恢复到刚安装数据库时的状态。mkdirdata-bakcddatamv*../data-bak/datarecoverydatabaseinitialization因为所有的数据都被删除了,需要进行mysql初始化。cd/usr/local/mysql./scripts/mysql_install_db--user=mysql&backup数据恢复登录MySQL:mysql-uroot-p123456登录后在数据库中执行如下语句恢复数据:source/app/all_mysql_backup.sql恢复后查看数据。
