Перестал реплицироваться сервер MySQL
ошибка Last_SQL_Errno: 1594
заходим по ssh на сервер SLAVE, входим в базу mysql -uпользователь -p, проверяем статус

mysql> SHOW SLAVE STATUS\G
.....................
Slave_IO_Running: Yes
Slave_SQL_Running: No
.....................
Last_Errno: 1594
Last_Error: Relay log read failure: Could not parse relay log event entry.

# останавливаем слейв
mysql> stop slave;

# говорим слейву забыть позицию репликации и очистить бинлоги
mysql> reset slave;

# говорим слейву откуда ему нужно начать репликацию, указываем позицию, на которой остановились
mysql> change master to master_log_file='mysql-bin.002045', master_log_pos=103641119;

# запускаем слейв
mysql> start slave;

mysql> SHOW SLAVE STATUS\G
должно быть
.....................
mysql> Slave_IO_Running: Yes
mysql> Slave_SQL_Running: Yes

"reset slave" удаляет master.info, relay-log.info и все файлы relay логов, поэтому нам не нужно вручную очищать директорию /var/lib/mysql (или где у вас там БД с логами хранятся)
https://dev.mysql.com/doc/refman/8.0/en/reset-slave.html
https://www.redips.net/mysql/replication-slave-relay-log-corrupted/

ошибка Last_IO_Error: Got fatal error 1236
https://blogosys.ru/2012/11/mysql-ispravlenie-oshibki-1236-pri-replikatsii/

Для восстановление реплики нужно понять на каком этапе она остановилась:
SHOW SLAVE STATUS \G;

Master_Log_File: mysql-bin.000470
Read_Master_Log_Pos: 3107870
Slave_IO_Running: No
Slave_SQL_Running: Yes

Теперь для восстановления выполним команды
STOP SLAVE;
CHANGE MASTER TO MASTER_LOG_POS = 0;
CHANGE MASTER TO MASTER_LOG_FILE = "mysql-bin.000471";
START SLAVE;

и смотрим вывод
SHOW SLAVE STATUS \G;

Master_Log_File: mysql-bin.000472
Read_Master_Log_Pos: 10596546
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

иногда нужно залить базу заново, а затем устранять неполадку

на master server
sudo mysqldump documentsAll > /home/user/dump1.sql -u root -p
sudo mysqldump artixcsAll > /home/user/dump2.sql -u root -p

на slave server
service mysql stop
service mysql start
mysql artixcsAll < /home/user/dump2.sql -u root -p
mysql documentsAll < /home/user/dump1.sql -u root -p


ошибка Error_code: 1032;
https://dba.stackovernet.com/ru/q/7554
просто останови раба используя
mysql> stop slave;
Затем установите глобальную переменную sql_slave_skip_counterв 1, например:

mysql> set global sql_slave_skip_counter=1;
Затем запустите раб:

mysql> start slave;
Затем проверьте, работает ли раб:

mysql> show slave status \G;
Если ошибка все еще существует, установите большее значение sql_slave_skip_counter как:

mysql> set global sql_slave_skip_counter=1000;
Опять проверь статус раба.

Если вы обнаружите, что skip_sqlзначение не равно нулю в статусе ведомого, снова остановите ведомое и выполните:

mysql> set global sql_slave_skip_counter=0;
mysql> start slave;


ошибка ERROR 1819 (HY000)
Решение проблемы в MySQL — ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
# mysql -u root -p
mysql> SELECT PLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME LIKE 'validate%';

mysql> SHOW GLOBAL VARIABLES LIKE 'validate_password%';
SET GLOBAL validate_password_special_char_count = 0;
CREATE USER 'test1'@'localhost' IDENTIFIED BY 'ei7veeChu4bo';
Если Вас устраивает такая политика, то не забудьте добавить в /etc/my.cnf в секцию [mysqld] настройку validate_password_special_char_count=0

[mysqld]
validate_password_special_char_count=0

Если Вы хотите, чтобы никто не смог выгрузить плагин validate_password, то в /etc/my.cnf в секцию [mysqld] нужно добавить настройку validate-password=FORCE_PLUS_PERMANENT

[mysqld]
validate-password=FORCE_PLUS_PERMANENT
Если Вы хотите отключить плагин на совсем, то выполните:

mysql> UNINSTALL PLUGIN validate_password;
Для повторной активации плагина выполните:

mysql> INSTALL PLUGIN validate_password SONAME 'validate_password.so';


частые команды
Правильный импорт БД MySQL
Импорт БД
Можно воспользоваться командой :
mysql -u root -p root_pass db_name < db_name.sql
но при её использовании импорт может оказаться неудачным.

Правильнее сделать импорт напрямую через консоль MySQL.
Заходим в MySQL:
mysql -u Login -p
Выбираем БД:
use db_name;
Делаем импорт файла в выбранную бд:
source db_name.sql;
Видим одобрительные query ok и довольные выходим exit;

Экспорт базы данных
На всякий случай памятка по экспорту с помощью mysqldump:
mysqldump -uLogin -pPassword db_name > db_name.sql

Как узнать путь до файлов базы данных MySQL/MariaDB в Linux и Windows

путь до базы данных:
mysqld --verbose --help | grep ^datadir

mysql -u root -p
select @@datadir;

узнать путь до базы данных MySQL/MariaDB в скрипте
mysql -s -N -u root -p information_schema -e "SELECT Variable_Value FROM GLOBAL_VARIABLES WHERE Variable_Name = 'datadir'"

узнать настройки директорий в MySQL/MariaDB
mysql -u root -p -e "SHOW VARIABLES WHERE Variable_Name LIKE '%dir'"

блокируем все таблицы в нашей базе данных:
USE newdatabase;
FLUSH TABLES WITH READ LOCK;

снять режим чтения командой
mysql-master> UNLOCK TABLES;

SET GLOBAL read_only = ON;
SET GLOBAL read_only = OFF;

Проверяем статус Мастер-сервера:
SHOW MASTER STATUS;

mysqlshow -u USER -pPASSWORD
mysqlshow -u USER -pPASSWORD DATABASE

на master server
sudo mysqldump documentsAll > /home/user/dump1.sql -u root -p
sudo mysqldump artixcsAll > /home/user/dump2.sql -u root -p

на slave server
sudo service mysql stop
sudo service mysql start
sudo mysql artixcsAll < /home/user/dump2.sql -u root -p
sudo mysql documentsAll < /home/user/dump1.sql -u root -p

http://www.mysql.ru/docs/man/Getting_information.html
https://clickhouse.yandex/docs/ru/query_language/misc/

SHOW DATABASES; — список баз данных
SHOW TABLES [FROM db_name]; — список таблиц в базе
SHOW COLUMNS FROM таблица [FROM db_name]; — список столбцов в таблице
SHOW CREATE TABLE table_name; — показать структуру таблицы в формате «CREATE TABLE»
SHOW INDEX FROM tbl_name;— список индексов
SHOW GRANTS FOR user [FROM db_name]; — привилегии для пользователя.
SHOW VARIABLES; — значения системных переменных
SHOW [FULL] PROCESSLIST; — статистика по mysqld процессам
SHOW STATUS; — общая статистика
SHOW TABLE STATUS [FROM db_name]; — статистика по всем таблицам в базе

SHOW DATABASES;
USE база;
SHOW TABLES;
SELECT * FROM таблица1;
DELETE FROM таблица1 WHERE столбец1 IN (8,9,10,11,12);
DELETE FROM таблица1 WHERE столбец1 BETWEEN 10 and 248; - удалить записи с 10 по 248
DELETE FROM таблица2 WHERE столбец1 BETWEEN 4 AND 246 AND столбец1 <> 8; - удалить записи с 4 по 246, кроме 8


Сброс пароля root в mysql

/etc/rc.d/init.d/mysqld stop # останавливаем mysqld
ps awx | grep mysqld # Контроль, киляем если еще жив

mysqld_safe --skip-grant-tables # Запускаем без проверки привилегий

mysql -u root mysql
> update user Password=PASSWORD('тут пароль') where User='root';
> flush privileges;

mysqld restart

ещё рецепт Как сбросить пароль root MySQL или MariaDB

sudo systemctl stop mysql
sudo systemctl stop mariadb
sudo mysqld_safe --skip-grant-tables --skip-networking &
mysql -u root
Один простой способ изменить пароль root для современных версий MySQL - использовать команду ALTER USER . Однако эта команда не будет работать сейчас, потому что таблицы предоставления не загружены. необходимо перезагрузить таблицы грантов, FLUSH PRIVILEGES
FLUSH PRIVILEGES;

Для MySQL 5.7.6 и новее, а также MariaDB 10.1.20 и новее используйте следующую команду.
ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';

Для MySQL 5.7.5 и старше, а также MariaDB 10.1.20 и старше используйте:
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('new_password');

Если команда ALTER USER не работает
UPDATE mysql.user SET authentication_string = PASSWORD('new_password') WHERE User = 'root' AND Host = 'localhost';
Не забудьте перезагрузить таблицы грантов после этого.
FLUSH PRIVILEGES;

Перезагрузите сервер базы данных в обычном режиме
Для MySQL используйте:
sudo kill `cat /var/run/mysqld/mysqld.pid`
Для MariaDB используйте:
sudo kill `/var/run/mariadb/mariadb.pid`
Затем перезапустите сервис, используя systemctl .
Для MySQL используйте:
sudo systemctl start mysql
Для MariaDB используйте:
sudo systemctl start mariadb
Теперь вы можете подтвердить, что новый пароль был введен правильно, запустив:
mysql -u root -p

Как восстановить репликацию MySQL или MariaDB
Если кластер работает в режиме Master - Master, сначала найдем ноду, на которой произошел сбой репликации. Для этого заходим на каждом сервере в оболочку mysql следующей командой:
# mysql -uroot -p
* в данном примере заходим от имени пользователя root.

И выводим состояние ноды в режиме Slave:
mysql> SHOW SLAVE STATUS\G

В случае проблем с репликацией мы увидим значения Slave_IO_Running и/или Slave_SQL_Running в состоянии No, а также описание ошибки:

Состояние нерабочей репликации MySQL

На рабочей Master-ноде
Блокируем все таблицы всех баз для чтения и записи:
mysql> FLUSH TABLES WITH READ LOCK; SET GLOBAL read_only = ON;

И выводим состояние работы СУРБД:
mysql> show master status\G

Результат будет, примерно, таким:

            File: mysql-bin.000015
        Position: 6315
    Binlog_Do_DB:
Binlog_Ignore_DB: information_schema,mysql


Запомним или запишем значения для File и Position. Они понадобятся при восстановлении вторичной ноды кластера.

Теперь выходим из командной оболочки базы:
mysql> \q

и создаем дамп рабочих баз:
# mysqldump -uroot -p -v --databases db1 db2 > /tmp/mydb_dump.sql
* данная команда сделает дамп баз db1, db2 и сохранит его в файл /tmp/mydb_dump.sql.

Теперь снова подключаемся к MySQL:
# mysql -uroot -p

и снимаем ранее установленные блокировки:
mysql> SET GLOBAL read_only = OFF;

Отключаемся:
mysql> \q

Полученный ранее файл с резервной копией переносим на второй сервер при помощи такой команды:
# scp /tmp/mydb_dump.sql dmosk@192.168.166.156:/tmp
* в данном примере, мы скопируем созданный нами дамп /tmp/mydb_dump.sql в каталог /tmp сервера 192.168.166.156 подключившись под учетной записью dmosk.

На нерабочей ноде
Создаем дамп баз:
# mysqldump -uroot -p -v --databases db1 db2 > /tmp/mydb_dump_slave.sql

Заходим в оболочку управления MySQL:
# mysql -uroot -p

Останавливаем репликацию:
mysql> stop slave;

Удаляем старые базы:
mysql> drop database db1;
mysql> drop database db2;
* в данном примере удаляются базы, для которых мы сделали резервные копии.

И создаем их заново:
mysql> CREATE DATABASE db1 DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
mysql> CREATE DATABASE db2 DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;

Выходим из оболочки:
mysql> \q

Теперь восстанавливаем базы из ранее созданного дампа:
# mysql -v -uroot -p < /tmp/mydb_dump.sql

... или если создавалась резервная копия для одной базы, команда будет с указанием этой базы:
# mysql -v -uroot -p db < /tmp/mydb_dump.sql

Опять подключаемся к СУБД:
# mysql -uroot -p

и вводим такую команду:
mysql> change master to master_host = "192.168.166.155", master_user = "replmy", master_password = "password", master_log_file = "mysql-bin.000015", master_log_pos = 6315;

* 192.168.166.155: IP-адрес моего первого сервера. replmy: учетная запись для репликации, которая была создана при создании кластера. password: пароль для учетной записи replmy. mysql-bin.000015: имя файла, которое мы должны были записать или запомнить (у вас может быть другим). 6315: номер позиции, с которой необходимо начать репликацию (также должны были записать или запомнить ранее).

Запускаем репликацию следующей командой:
mysql> start slave;

И проверяем состояние репликации:
mysql> SHOW SLAVE STATUS\G

Состояние Slave_IO_Running и Slave_SQL_Running должно быть Yes, а ошибки должны исчезнуть:

Безопасное удаление (чистка) логов mysql-bin в MySQL или MariaDB
Ручная чистка логов
Запросы выполняются из командной оболочки MySQL.

Для удаления конкретного bin-файла:
> PURGE BINARY LOGS TO 'mysql-bin.000145';
* где mysql-bin.000145 — имя файла с логами.

Для удаления логов за определенный период:
> PURGE BINARY LOGS BEFORE '2017-05-07 00:00:00';
* удаляем логи до 5-о мая 2017 года.

Или так:
PURGE BINARY LOGS BEFORE DATE(NOW() - INTERVAL 90 DAY) + INTERVAL 0 SECOND;
* удаляем все, оставляем логи за последние 90 дней.

Автоматическое удаление
Открываем конфигурационный файл СУБД:
vi /etc/my.cnf.d/server.cnf

или в более ранних версиях:
vi /etc/my.cnf

и в секцию [mysqld] добавляем следующее:
expire_logs_days = 90
* в данном примере мы настроили срок хранения логов в 90 дней.

Настройки применятся после перезагрузки сервера баз данных:
systemctl restart mysql || systemctl restart mariadb

Также будет выполнена чистка логов, которые старше выставленной даты (90 дней в нашем примере).

разное
https://proselyte.net/tutorials/sql/
http://2sql.ru/

less /var/log/mysql/error.log

Как исправить поврежденные таблицы в MySQL
systemctl stop mysql
cp -r /var/lib/mysql /var/lib/mysql_bkp
mysql -u root -p
проверить, не повреждена ли таблица
CHECK TABLE table_name;
Если таблица MyISAM действительно повреждена, ее обычно можно исправить
REPAIR TABLE table_name;
systemctl restart mysql

Если сервер по-прежнему force_recovery из force_recovery или иным образом недоступен, то может быть полезно включить опцию InnoDB force_recovery . Вы можете сделать это, отредактировав файл mysqld.cnf :
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

В разделе [mysqld] добавьте следующую строку:
/etc/mysql/mysql.conf.d/mysqld.cnf
. . .
[mysqld]
. . .
innodb_force_recovery=1
Сохраните и закройте файл, а затем попробуйте перезапустить службу MySQL снова.

выгрузить данные таблицы в новый файл.
mysqldump database_name table_name > out.sql

Затем удалите таблицу из базы данных. Чтобы избежать повторного открытия приглашения MySQL, вы можете использовать следующий синтаксис:
mysql -u user -p --execute="DROP TABLE database_name.table_name"

После этого восстановите таблицу с помощью только что созданного файла дампа:
mysql -u user -p < out.sql

Как устранить неполадки MySQL
Как настроить SSL / TLS для MySQL в Ubuntu 16.04

Основы репликации в MySQL
Как настроить MySQL Master-Slave репликацию?
Настройка репликации master-slave в MySQL
Синхронизация MySQL баз после ошибки репликации
Проверка Состояния Репликации MySQL
Восстановление MySQL репликации после повреждения relay логов slave

Profile

uzverss: (Default)
uzverss

December 2024

S M T W T F S
12345 67
891011121314
15161718192021
22232425262728
293031    

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jan. 22nd, 2026 03:45 am
Powered by Dreamwidth Studios