Связаться со мной:
6 заметок с тегом

mysql

Не стартует mysql в centos 6 после обновления.

После обновления mysql до 5.7 он не стартует с ошибкой

[ERROR] Fatal error: mysql.user table is damaged. Please run mysql_upgrade.

Добавляем в my.cnf в секцию [mysqld]

skip-grant-tables

С этим параметром стартуем mysql и делаем mysql_upgrade

service mysqld start
mysql_upgrade

Затем убираем skip-grant-tables из конфига и рестартим mysql

service mysql restart

Mysql должен запустится без ошибок

17 июня   centos   mysql

Восстановление поврежденных innodb таблиц

При повреждении innodb таблиц мускуль не стартует, что создает определенные сложности для ремонта таблиц.
Чтобы запустить мускуль нужно вписать в my.cnf

innodb_force_recovery = 1
innodb_purge_threads = 0

Затем стартуем mysql. Он запустится в режиме в котором таблицы можно читать, но нельзя редактировать. И делаем дамп всех баз

mysqldump -u root -p --all-databases > dump.sql

Теперь идем в каталог /var/lib/mysql и удаляем там все каталоги кроме mysql и performance_schema, файлы ib_logfile* и ibdata* тоже сносим.
Теперь убираем из my.cnf

innodb_force_recovery = 1
innodb_purge_threads = 0

И рестартуем mysql в нормальном режиме.
Теперь вернем все базы обратно

cat dump.sql | mysql -u root -p
2018   innodb   mariadb   mysql   mysqldump

Дампы всех баз mysql

Сделать дампы всех баз данных пользователя, каждую базу в отдельный дамп:

for i in `mysql -u $USER -p$PASSWORD -e'show databases;' | \
 grep -v performance_schema | grep -v information_schema | grep -v mysql | \
 grep -v Database`; do mysqldump -u $USER -p$PASSWORD $i > /backup/mysql/$i.sql;done
$USER - пользователь mysql
$PASSWORD - пароль пользователя mysql
2015   mysql   mysqldump

Переводим php движки с mysql на mysqli

Начиная с PHP 5.5.0 функции модуля mysql считаются устаревшими(deprecated), а в PHP 7 данный модуль вообще отсутствует, вместо него нужно использовать mysqli. Движки написаные с помощью функций модуля mysql не работают, т.к не могут подключится к базе данных и выдают в логе ошибки типа такой:

PHP Fatal error:  Uncaught Error: Call to undefined function mysql_connect() in...

К счастью, исправить все функции mysql на mysqli можно автоматически, скриптом на любом сайте.

Вот здесь скачиваете zip архив. Создаете в каталоге домена подкаталог например convert и кладете туда содержимое архива.
Потом переходите по ссылке вида
http://ваш_домен.ru/convert/GUI/index.php
И видите

Тут я выбирал «Convert a file», т.к в ошибке указан файл в котором присутствует эта функция. Указываем путь к файлу примерно как на картинке. И выбираем сразу заменить старый файл и забекапить.

Затем жмакаем «Start the conversion» и наслаждаемся результатом.

2015   mysql   mysqli   php   php7

Удаление ревизий записей в wordpress без плагинов из консоли.

WordPress по умолчанию сохраняет ревизии записей в базе mysql. В большинстве случаев эти ревизии не нужны, но они существенно замедляют работу базы mysql и увеличивают её размер.

В первую очередь отключим сохранение ревизий. Откроем файл wp-config.php в папке сайта. И добавим в него строку:

define('WP_POST_REVISIONS', false);

Перед выполнением работ с базой сделаем дамп базы на случай непредвиденных последствий.

# mysqldump -u пользователь_mysql -p имя_базы_wordpress > dump.sql

Система спросит пароль пользователя mysql.

Мы сделали дамп, теперь можно работать с базой. Если что-то пойдёт не так, мы всегда можем восстановить её из дампа. Подключимся к серверу mysql

# mysql -u пользователь_mysql -p

Система спросит пароль пользователя mysql, логинимся. Всё, мы в консоли mysql.

Снимок экрана от 2013-10-20 10:11:03

Выберем базу с которой будем работать, соответственно нам нужно знать название базы с которой работает wordpress.

mysql> USE имя_базы_wordpress;

Удаляем метаданные

mysql> DELETE FROM wp_postmeta WHERE post_id IN (SELECT ID FROM wp_posts WHERE post_type = ‘revision’ AND post_name LIKE ‘%revision%’);

Удаляем таксономию

mysql> DELETE FROM wp_term_relationships WHERE object_id IN (SELECT ID FROM wp_posts WHERE post_type = ‘revision’ AND post_name LIKE ‘%revision%’);

Теперь удаляем сами ревизии.

mysql> DELETE FROM wp_posts WHERE post_type = ‘revision’ AND post_name LIKE ‘%revision%’;

И в конце выполняем оптимизацию таблицы

mysql> OPTIMIZE TABLE wp_posts;

Всё, ревизии удалены. Проверяем работоспособность сайта.

Автозагрузка mysql на виртуальном сервере.

На некоторых виртуальных серверах VPS(VDS) не работает автозапуск mysql после ребута, из-за настроек стартового скрипта mysql. Исправить это довольно просто. Нужно указать mysql, что стартовать нужно независимо от настроек сети и файловых систем. В файле /etc/init/mysql.conf комментируем строки:

#start on (net-device-up
# and local-filesystems
# and runlevel [2345])

И после них дописываем:

start on runlevel [2345]

2013   mysql   openvz   ubuntu   VDS   VPS