Table of Contents
Быстрые заметки по MySQL
Ошибка Mysql - ERROR 1146 (42S02): Table 'mysql.servers' doesn't exist
На Cenos 5 работает mysql-5.1.58.
При попытке дать команду “flush privileges” вылезала следующая ошибка:
mysql> flush privileges; ERROR 1146 (42S02): Table 'mysql.servers' doesn't exist
В базе “mysql” не было таблицы “servers”.
mysql> use mysql; Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed mysql> show tables; +---------------------------+ | Tables_in_mysql | +---------------------------+ | columns_priv | | db | | func | | help_category | | help_keyword | | help_relation | | help_topic | | host | | proc | | procs_priv | | tables_priv | | time_zone | | time_zone_leap_second | | time_zone_name | | time_zone_transition | | time_zone_transition_type | | user | +---------------------------+ 17 rows in set (0.01 sec)
На других серверах, с более поздней версией mysql, таблица “servers” была.
Для решения проблемы надо создать эту таблицу.
mysql> CREATE TABLE `servers` ( `Server_name` char(64) NOT NULL, `Host` char(64) NOT NULL, `Db` char(64) NOT NULL, `Username` char(64) NOT NULL, `Password` char(64) NOT NULL, `Port` int(4) DEFAULT NULL, `Socket` char(64) DEFAULT NULL, `Wrapper` char(64) NOT NULL, `Owner` char(64) NOT NULL, PRIMARY KEY (`Server_name`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT="MySQL Foreign Servers table"; Query OK, 0 rows affected (0.02 sec)
После добавления таблицы все стало хорошо.
mysql> flush privileges; Query OK, 0 rows affected (0.00 sec)
При написании заметки использовались материалы:
Сбросить рутовый пароль
Останавливаем mysql
# /etc/init.d/mysqld stop Stopping mysqld: [ OK ]
Запускаем mysql в безопасном режиме.
# /usr/bin/mysqld_safe --skip-grant-tables --user=root & [1] 6363 # 160206 12:54:08 mysqld_safe Logging to '/var/log/mysqld.log'. 160206 12:54:09 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
Заходим под рутом без пароля.
# mysql -u root
Переключаемся на базу mysql.
mysql> USE mysql;
Смотрим список таблиц и содержаение таблицы user.
mysql> show tables; +---------------------------+ | Tables_in_mysql | +---------------------------+ | columns_priv | ... | user | +---------------------------+ 23 rows in set (0.00 sec) mysql> SELECT * FROM user
В таблице user так же есть пароли и настройки всех остальных пользователей.
Задаем новый пароль P@s$ = меняем значение поля Password.
mysql> UPDATE user SET Password=PASSWORD('P@s$') WHERE User='root';
Функция “PASSWORD()” используется для шифрования.
Выходим и перезапускаем mysql
mysql> exit Bye # /etc/init.d/mysqld restart 160206 13:12:50 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended Stopping mysqld: [ OK ] Starting mysqld: [ OK ] [1]+ Done /usr/bin/mysqld_safe --skip-grant-tables --user=root
Изменить значение поля в строке
Есть строка.
mysql> SELECT * FROM logcon_views; +----+-------------+-------------------------------------+--------+---------+ | ID | DisplayName | Columns | userid | groupid | +----+-------------+-------------------------------------+--------+---------+ | 2 | SRX-FILTER | SRX, TIME_UTC_6, TIME_UTC, msg, 111 | NULL | NULL | +----+-------------+-------------------------------------+--------+---------+ 1 row in set (0.00 sec)
Надо изменить значение поля Columns в строке с ID равным 2.
mysql> UPDATE logcon_views SET Columns = 'SRX, TIME_UTC_6, TIME_UTC, msg' WHERE ID = 2; Query OK, 1 row affected (0.00 sec) Rows matched: 1 Changed: 1 Warnings: 0 <code> ==== Удалить строку из таблицы ==== Есть такая таблица. <code> mysql> select * from logcon_fields; +--------------+------------------+--------------+ | FieldID | FieldDefine | FieldCaption | +--------------+------------------+--------------+ | SRX | SYSLOG_SRX | SRX | | TIME (UTC+6) | SYSLOG_TIME_UTC6 | TIME (UTC+6) | +--------------+------------------+--------------+ 2 rows in set (0.00 sec) <code> Хотим удалить вторую строку. <code> mysql> DELETE FROM logcon_fields WHERE FieldID ="TIME (UTC+6)"; Query OK, 1 row affected (0.00 sec)
Создать базу из шаблона
Есть вот такой шаблон базы для rsyslog.
# cat /usr/share/doc/rsyslog-mysql-5.8.10/createDB.sql CREATE DATABASE rsyslog_db; USE rsyslog_db; CREATE TABLE SystemEvents ( ID int unsigned not null auto_increment primary key, CustomerID bigint, #.... SystemID int NULL ); CREATE TABLE SystemEventsProperties ( ID int unsigned not null auto_increment primary key, SystemEventID int NULL , ParamName varchar(255) NULL , ParamValue text NULL );
Что бы создать эту базу даем след. команду:
# mysql -u root -p < /usr/share/doc/rsyslog-mysql-5.8.10/createDB.sql
Проверяем.
mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | cacti_db | | mysql | | racktables_db | | rsyslog_db | | viewvc_db | +--------------------+ 6 rows in set (0.00 sec) mysql> use rsyslog_db; Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed mysql> show tables; +------------------------+ | Tables_in_rsyslog_db | +------------------------+ | SystemEvents | | SystemEventsProperties | +------------------------+ 2 rows in set (0.00 sec)
Дать права пользователю на базу и задать пароль
mysql> grant all privileges on rsyslog_db.* to rsyslog_user@localhost identified by 'P@Ss'; Query OK, 0 rows affected (0.00 sec) mysql> flush privileges; Query OK, 0 rows affected (0.00 sec)
Создать пользователя
mysql> create user rsyslog_user@localhost; Query OK, 0 rows affected (0.00 sec)
Удалить пользователя
mysql> drop user rsyslog_user@localhost; Query OK, 0 rows affected (0.00 sec)
Удалить базу
mysql> drop database rsyslog_db; Query OK, 13 rows affected (0.00 sec)
Посмотреть имеющиеся базы
mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | cacti_db | | mysql | | racktables_db | | rsyslog_db | | viewvc_db | +--------------------+ 6 rows in set (0.00 sec)
Заход
Заход под root на localhost:
- пароль надо ввести
# mysql -u root -p Enter password:
- сразу пишем пароль
# mysql -u root -pSUPERPASSWORD