Як видалити всі таблиці із БД PostgreSQL и MySQL

В категорії Підказки от 14 Лютого, 2023. Автор admin

Видалення всіх таблиці в БД для PostgreSQL:

1. Зберігаємо всі таблиці в файл

psql -U PGUSER -t -d PGDBNAME -c \
"SELECT 'DROP TABLE ' || n.nspname || '.' || c.relname || ' CASCADE;' \
FROM pg_catalog.pg_class AS c LEFT JOIN pg_catalog.pg_namespace AS n \
ON n.oid = c.relnamespace WHERE relkind = 'r' AND n.nspname NOT IN \
('pg_catalog', 'pg_toast') AND pg_catalog.pg_table_is_visible(c.oid)" \
> /tmp/droptables

2. Видаляємо таблиі

psql -U PGUSER -d PGDBNAME -f /tmp/droptables

де

PGUSER — імя користувача
PGDBNAME — імя БД в в якій потрібно видалити всі таблиці

Видалення всіх таблиць в БД для MySQL:

DB="MYDB";USER="MYUSER";PASSWD="MYPASSWD";mysql -N -s -u $USER -p$PASSWD $DB -e 'show tables' | awk '{print "drop table " $1 ";"}' | mysql -u $USER -p$PASSWD $DB

де

DB — база в якій потрібно видалити таблиці
USER и PASSWD — логін та пароль користувача в якого є повні права доступу до бази

Теги: ,

MySQL: Ошибка репликации – Got fatal error 1236 from master when reading data from binary log

В категорії Підказки от 25 Травня, 2021. Автор admin

После аварийной перезагрузки mysql-сервера, исполняющего роль master, может сломаться репликация. А на slave после выполнения show slave status\G можно лицезреть следующую ошибку:

Slave_IO_Running: No
Slave_SQL_Running: Yes
......
Last_IO_Errno: 1236
Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: 'Client requested master to start replication from position > file size; the first event 'mysql-bin.000034' at 988867715, the last event read from '/db/mysql/mysql-bin.000034' at 4, the last byte read from '/db/mysql/mysql-bin.000034' at 4.'

Смотрим позицию, до которой дошел slave:

[slave]$ echo "show slave status \G" | mysql -u root -p | grep -E "[[:space:]]Master_Log_File|Read_Master_Log_Pos"
Master_Log_File: mysql-bin.000034
Exec_Master_Log_Pos: 988867715

Смотрим последнюю позицию, которая реально присутствует в этом бинлоге мастера:

[master]$ mysqlbinlog /db/mysql/mysql-bin.000034 | tail -n 12
'/*!*/;
# at 988777276
#180425  8:57:41 server id 1  end_log_pos 988777362 CRC32 0x3172f95b     Query    thread_id=8036410    exec_time=0    error_code=0
SET TIMESTAMP=1524635861/*!*/;
SET @@session.collation_database=DEFAULT/*!*/;
COMMIT
/*!*/;
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;

И видим, что последняя позиция – 988777362. В то время как slave пытается исполнить позицию 988867715, которая, очевидно, дальше, чем 988777362. Вывод – надо “отмотать” slave немного назад:

[slave] mysql> stop slave;
[slave] mysql> change master to master_log_file='mysql-bin.000034', master_log_pos=988777362;
[slave] mysql> start slave;


Ну и далее show slave status\G нам говорит, что slave начал догонять master.

Теги: , , ,

Восстановление MySQL таблиц

В категорії Підказки от 18 Серпня, 2019. Автор admin

Приведу пример простой проверки таблиц всех баз данных используя mysqlcheck:

mysqlcheck -u root -p -A

Где опция -u определяет имя пользователя под которым выполняется подключение к MySQL, -p для запроса пароля, -A для проверки таблиц всех баз данных.

Пример восстановления конкретной базы данных:

mysqlcheck -u root -p -r db_name

Пример восстановления конкретной таблицы в указанной базе данных:
mysqlcheck -u root -p -r db_name table_name

Більше »

Теги: