1) Устанавливаем необходимый софт
cd /root/ wget https://dev.mysql.com/get/Downloads/MySQLGUITools/mysql-utilities-1.6.5-1.el7.noarch.rpm wget https://dev.mysql.com/get/Downloads/Connector-Python/mysql-connector-python-2.1.7-1.el7.x86_64.rpm yum install mysql-utilities-1.6.5-1.el7.noarch.rpm mysql-connector-python-2.1.7-1.el7.x86_64.rpm
2) Копируем всю директорию mysql, убедитесь что Вы имеете достаточное количество свободного дискового пространства
mkdir /root/corrupt_mysql cp -r /var/lib/mysql /root/corrupt_mysql/
3) Запускаем mysql
systemctl start mysql
Если БД не запускается то постепенно повышаем параметр innodb_force_recovery от 2 и выше в /etc/my.cnf
Проставляем грант
mysql -e'grant all on . to frm@localhost identified by "MysqlFRMSecret678";'
4) Указываем имя поврежденной БД и восстанавливаем схему
DATABASE=brokendbname
for file in $(ls /root/corrupt_mysql/mysql/${DATABASE}/*.frm); do mysqlfrm --server=frm:MysqlFRMSecret678@localhost:/var/lib/mysql/mysql.sock --diagnostic $file | grep -v "WARNING" >> /root/corrupt_mysql/${DATABASE}_create.sql ; done sed -i 's##utf8#g' /root/corrupt_mysql/${DATABASE}_create.sql
5) Удаляем поврежденную базу данных
mysql -e'drop database ${DATABASE};' rm -rf /var/lib/mysql/${DATABASE}/
6) Комментируем в конфиге innodb_force_recovery и перезапускаем mysql
systemctl restart mysql
7) Создаем бд и загружаем схему
mysql -e'create database ${DATABASE};' mysql --force ${DATABASE} < /root/corrupt_mysql/${DATABASE}_create.sql
8) Копируем файлы таблиц из ранее скопированной директории с поврежденной БД и восстанавливаем данные каждой таблицы, проставляем права
for table in $(mysql -e 'show tables from ${DATABASE};' | grep -v "Tables_in"); do mysql ${DATABASE} -e"ALTER TABLE $table DISCARD TABLESPACE;"; done for table in $(mysql -e 'show tables from ${DATABASE};' | grep -v "Tables_in"); do rsync -avzP /root/corrupt_mysql/mysql/${DATABASE}/$table.ibd /var/lib/mysql/${DATABASE}/ ; done chown -R mysql:mysql /var/lib/mysql/ for table in $(mysql -e 'show tables from ${DATABASE};' | grep -v "Tables_in"); do mysql ${DATABASE} -e"ALTER TABLE $table IMPORT TABLESPACE;"; done
Перезапускаем mysql
systemctl restart mysql
Проверяем данные в таблице
0 Comments
samanthrunny · 13.11.2024 at 19:07
респект
Иметь наставника — значит избегать лишних ошибок и путешествовать стилисты крестовский остров вперед быстрее. помимо прочего — не бояться проблем, и научиться учиться на своих ошибках.