Перестал реплицироваться сервер 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
This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

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 09:56 am
Powered by Dreamwidth Studios