Случилась давеча беда. Перестал подключатся пользователь с другого сервера к базе mysql. Однако phpmyadmin работает под этим пользователем и другие приложения работают. Первая мыль была – не пускает хост. В процессе выяснения пользователь похерился, и перестало работать все.
И так. Нам понадобится:
Зайти в мускул под рутом с сервера, где мускул.
1 2 3 |
mysql -uroot -ppass |
Посмотреть пользователей (user)
1 2 3 |
SELECT USER from mysql.user; |
Удалить пользователя
1 2 3 |
DROP USER user1@host; |
Создать пользователя
1 2 3 |
CREATE USER 'monty'@'localhost' IDENTIFIED BY 'some_pass'; |
Дать все привилегии (PRIVILEGES)
1 2 3 |
GRANT ALL PRIVILEGES ON *.* TO 'monty'@'localhost' WITH GRANT OPTION; |
В случае с последней командой можно даже не делать FLUSH
1 2 3 |
FLUSH PRIVILEGES; |
Еще два способа,после который надо делать FLUSH.
1 2 3 |
GRANT ALL PRIVILEGES ON * . * TO 'newuser'@'localhost'; |
1 2 3 4 5 6 7 |
INSERT INTO user VALUES('%','monty',PASSWORD('some_pass'), 'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y', 'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y', '','','','',0,0,0,0); |
Так же можно указать какие именно привилегии даются.
1 2 3 4 5 |
GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP ON bankaccount.* TO 'custom'@'localhost'; |
Или так
1 2 3 4 5 6 7 8 9 |
mysql> INSERT INTO user (Host,User,Password) -> VALUES('server.domain','custom',PASSWORD('obscure')); mysql> INSERT INTO db -> (Host,Db,User,Select_priv,Insert_priv, -> Update_priv,Delete_priv,Create_priv,Drop_priv) -> VALUES('localhost','bankaccount','custom', -> 'Y','Y','Y','Y','Y','Y'); |
Теперь надо проверить коннект с удаленного сервера
1 2 3 4 5 6 7 |
telnet 1.1.1.1 3306 Trying 1.1.1.1... Connected to 1.1.1.1. Escape character is '^]'. Host 'static.2-2-2-2.clients.your-server.de' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'Connection closed by foreign host. |
Я получил ошибку, ура!
Оказалось все банально. Надо было сбросить кеш хостов Mysql.
1 2 3 |
mysqladmin -uroot -ppass flush-hosts |
Ну зато был удален всякий мусор и прописан bind-address в my.cnf.
Оптимизация mysql
1 2 3 |
mysqloptimize --all-databases -u root -p |
Создание дампа
1 2 3 |
mysqldump -u root -p -h hostname databasename > sqlfilename.sql |
Создание дампа с указанием таблиц
1 2 3 |
mysqldump -u... -p... mydb t1 t2 t3 > mydb_tables.sql |
Загрузка дампа в консоли
1 2 3 |
mysql -u root -p databasename < sqlfilename.sql |
Дамп с совместимостью с postgre
1 2 3 |
mysqldump db --compatible=postgresql --default-character-set=utf8 > dump.sql |
Дамп с игнорированием (исключением) таблиц
1 2 3 |
mysqldump db --ignore-table=db.table1 --ignore-table=db.table2 --ignore-table=db.table3 > dump.sql |
PostgreSQL
1 2 3 |
pg_dump -U user database > database.psql |
restore dump
1 2 3 |
psql -U user database < database.psql |
drop database
1 2 3 |
dropdb database -U user |