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: