LINUX-сервер пошаговые инструкции инсталляции и настройки - Бруй В. В. , Карлов С. В
..pdfГлава 31. MySQL – сервер баз данных |
451 |
Осуществите проверку подлинности имеющегося в вашем распоряжении архива с исходными кодами с использованием процедур, описанных в шаге 1 радела «Компиляция, оптимизация и инсталляция
OpenSSL» главы 12.
Шаг 2
Распакуйте архивы с исходными кодами MySQL в каталоге /var/tmp:
[root@drwalbr tmp]# tar xzpf mysql-4.0.13.tar.gz
Шаг 3
Создайте специального пользователя mysql, от имени которого будет запускаться MySQL:
[root@drwalbr tmp]# groupadd -g 27 mysql > /dev/null 2>&1 || : [root@drwalbr tmp]# useradd -u 27 -g 27 -s /bin/bash -M -r -d
/var/lib/mysql mysql > /dev/null 2>&1 || :
Шаг 4
Отконфигурируйте исходные коды MySQL:
[root@drwalbr tmp]# cd mysql-4.0.13
[root@drwalbr mysql-4.0.13]# CFLAGS="-static -O2 -march=i686 -funroll- loops" \
CXXFLAGS="-static -O2 -march=i686 -funroll-loops -felide-constructors - fno-exceptions -fno-rtti" \
./configure \ --prefix=/usr \ --libexecdir=/usr/sbin \ --sysconfdir=/etc \
--localstatedir=/var/lib/mysql \ --mandir=/usr/share/man \ --disable-shared \ --enable-assembler \ --with-thread-safe-client \ --with-mysqld-user="mysql" \
--with-unix-socket-path=/var/lib/mysql/mysql.sock \ --with-client-ldflags=-all-static \ --with-mysqld-ldflags=-all-static \ --without-readline \
--without-debug \ --without-docs \ --without-bench \ --with-charset=cp1251 \ --with-extra-charsets=all
Шаг 5
Откомпилируйте, проинсталлируйте MySQL, создайте и сохраните в надежном месте список установленных файлов:
[root@drwalbr mysql-4.0.13]# make
[root@drwalbr mysql-4.0.13]# find /* > /root/mysql1 [root@drwalbr mysql-4.0.13]# make install [root@drwalbr mysql-4.0.13]# mkdir -p /var/run/mysqld
[root@drwalbr mysql-4.0.13]# chown mysql.mysql /var/run/mysqld
[root@drwalbr mysql-4.0.13]# rm -rf /usr/mysql-test/
[root@drwalbr mysql-4.0.13]# rm -f /usr/share/mysql/mysql-*.spec [root@drwalbr mysql-4.0.13]# rm -f /usr/share/mysql/mysql-log-rotate
[root@drwalbr mysql-4.0.13]# strip /usr/sbin/mysqld [root@drwalbr mysql-4.0.13]# find /* > /root/mysql2
[root@drwalbr mysql-4.0.13]# diff /root/mysql1 /root/mysql2
>/root/mysql.installed
[root@drwalbr mysql-4.0.13]# mv /root/mysql.installed
/very_reliable_place/mysql.installed.YYYYMMDD
Конфигурирование MySQL
Конфигурирование MySQL осуществляется с использованием следующих файлов:
• главного конфигурационного файла /etc/my.cnf;
452 |
Часть 8. Программное обеспечение для сервера баз данных |
•файла настройки чередования регистрационных файлов /etc/logrotate.d/mysqld;
•файла инициализации /etc/init.d/mysqld.
Конфигурационный файл /etc/my.cnf
В комплекте поставки MySQL имеется несколько примеров конфигурационных файлов, оптимизированных для систем различных конфигураций и назначений. В rpm-варианте инсталляции эти файлы находятся в каталоге /usr/share/mysql. Файл my-huge.cnf содержит пример конфигурации для высокопроизводительных серверов с объемом оперативной памяти более 1…2 Гбайт, используемых исключительно в качестве сервера баз данных. Файл my-lage.cnf содержит пример конфигурации для высокопроизводительных серверов с объемом оперативной памяти более 512 Мбайт, используемых исключительно в качестве сервера баз данных. Файл my-medium.cnf содержит пример конфигурации для сервера с небольшим объемом оперативной памяти 32…64 Мбайт, преимущественно используемого в качестве сервера баз данных, или серверов с объемом оперативной памяти до 128 Мбайт, на которых MySQL функционирует совместно с другими службами. Файл my-small.cnf содержит пример конфигурации для систем с объемом оперативной памяти менее 64 Мбайт, на которых обращение к серверу баз данных осуществляется эпизодически.
Шаг 1
Создайте файл /etc/my.cnf, руководствуясь вашими потребностями, техническими характеристиками системы, на которой осуществляется установка, и ниже приведенными рекомендациями:
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock skip-locking
set-variable = key_buffer=16 set-variable = max_allowed_packet=1M set-variable = table_cache=128 set-variable = sort_buffer=512K set-variable = net_buffer_length=8k
set-variable = myisam_sort_buffer_size=8M #Only for RPM installation default-character-set=cp1251
[mysql.server]
user=mysql
basedir=/var/lib
[safe_mysqld] err-log=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid
[isamchk]
set-variable = key_buffer=20M set-variable = sort_buffer=20M set-variable = read_buffer=2M set-variable = write_bufer=2M
[myisamchk]
set-variable = key_buffer=20M set-variable = sort_buffer=20M set-variable = read_buffer=2M set-variable = write_bufer=2M
Строку:
default-character-set=cp1251
определяющую кодировку, используемую по умолчанию, следует использовать только в файле /etc/my.cnf, создаваемом при инсталляции из rpm-пакета. При инсталляции из исходных кодов указанная опция задается при конфигурировании исходных кодов (см. выше шаг 4 раздела «Компиляция, оптимизация и инсталляция MySQL").
Глава 31. MySQL – сервер баз данных |
453 |
Здесь не рассматривается назначение всех опций, используемых в этом конфигурационном файле, т. к. они подробно описаны во входящей в комплект поставки MySQL документации, находящейся на сервере разработчиков и русскоязычном ресурсе http://www.mysql.ru.
Шаг 2
Установите права доступа к файлу /etc/my.cnf и назначьте его владельцем пользователя root:
[root@drwalbr /]# chmod 644 /etc/my.cnf [root@drwalbr /]# chown 0.0 /etc/my.cnf
Конфигурационный файл /etc/logrotate.d/mysqld
Шаг 1
Создайте файл /etc/logrotate.d/mysqld, содержащий следующие строки:
/var/log/mysqld.log { missingok
create 0640 mysql mysql prerotate
[ -e /var/lock/subsys/mysqld ] && /bin/kill -HUP `/bin/cat /var/run/mysqld/mysqld.pid` || /bin/true
endscript postrotate
[ -e /var/lock/subsys/mysqld ] && /bin/kill -HUP `/bin/cat /var/run/mysqld/mysqld.pid` || /bin/true
endscript
}
При использовании такого варианта конфигурации файлы регистрации будут чередоваться еженедельно.
Шаг 2
Установите права доступа к файлу /etc/logrotate.d/mysqld и назначьте его владельцем пользователя root:
[root@drwalbr /]# chmod 644 /etc/logrotate.d/mysqld [root@drwalbr /]# chown 0.0 /etc/logrotate.d/mysqld
Файл инициализации /etc/init.d/mysqld
Создание файла /etc/init.d/mysqld необходимо только в случае инсталляции MySQL из исходных кодов. При инсталляции из rpm-пакетов инициализационный файл /etc/init.d/mysql создается автоматически. Если вы устанавливаете MySQL из rpm-пакетов, пропустите этот раздел и перейдите к следующему.
Шаг 1
Создайте файл инициализации /etc/init.d/mysqld, содержащий следующие строки:
#!/bin/bash
#This shell script takes care of starting and stopping MySQL.
#chkconfig: 345 78 12
#description: MySQL is a fast & secure SQL database server.
#processname: mysqld
#config: /etc/my.cnf
#pidfile: /var/run/mysqld/mysqld.pid
#Source function library.
. /etc/init.d/functions
#Source networking configuration.
. /etc/sysconfig/network
#Source for additional options if we have them. if [ -f /etc/sysconfig/mysql ] ; then
454 |
Часть 8. Программное обеспечение для сервера баз данных |
. /etc/sysconfig/mysql
fi
# Check that networking is up.
[ ${NETWORKING} = "no" ] && exit 0
#If MySQL is not available stop now. [ -f /usr/bin/mysqld_safe ] || exit 0
#Path to the MySQL binary.
safe_mysqld=/usr/bin/mysqld_safe
RETVAL=0
prog="MySQL" echo "6" start() {
if [ ! -d /var/lib/mysql/mysql ] ; then action $"Initializing $prog database: "
/usr/bin/mysql_install_db ret=$?
chown -R mysql.mysql /var/lib/mysql if [ $ret -ne 0 ] ; then
return $ret
fi
fi
chown -R mysql.mysql /var/lib/mysql chmod 0755 /var/lib/mysql
daemon $safe_mysqld --defaults-file=/etc/my.cnf >/dev/null 2>&1 & ret=$?
if [ $ret -eq 0 ]; then
action $"Starting $prog: " /bin/true
else
action $"Starting $prog: " /bin/false
fi
[ $ret -eq 0 ] && touch /var/lock/subsys/mysqld return $ret
}
stop() {
kill `cat /var/run/mysqld/mysqld.pid 2> /dev/null ` > /dev/null
2>&1
ret=$?
if [ $ret -eq 0 ]; then
action $"Shutting down $prog: " /bin/true
else
action $"Shutting down $prog: " /bin/false
fi
[ $ret -eq 0 ] && rm -f /var/lock/subsys/mysqld
[ $ret -eq 0 ] && rm -f /var/lib/mysql/mysql.sock return $ret
}
# See how we were called. case "$1" in
start)
start
;;
stop)
stop
;;
*)
echo $"Usage: $0 {start|stop}" exit 1
Глава 31. MySQL – сервер баз данных |
455 |
esac exit $?
Шаг 2
Установите права доступа к файлу/etc/init.d/mysqld и назначьте его владельцем пользователя
root:
[root@drwalbr /]# chmod 700 /etc/init.d/mysqld [root@drwalbr /]# chown 0.0 /etc/init.d/mysqld
Шаг 3
Для автоматического запуска MySQL при загрузке системы создайте необходимые ссылки:
[root@drwalbr /]# chkconfig --add mysqld [root@drwalbr /]# chkconfig --level 345 mysqld on
Установка пароля пользователя root и удаление демонстрационной базы данных test
Шаг 1
Запустите MySQL. Для запуска сервера баз данных, инсталлированного с помощью rpm-пакетов, используйте команду:
[root@drwalbr dymatel]# /etc/init.d/mysql start
[root@drwalbr dymatel]# Starting mysqld daemon with databases from /var/lib/mysql
Для запуска сервера баз данных, инсталлированного посредством компиляции исходных кодов, используйте команду:
[root@drwalbr /]# /etc/init.d/mysqld start
Запускается MySQL: [ОК]
Как видно из этих примеров разница заключается только в виде выводимой информации при запуске программы.
Шаг 2 Попытайтесь установить соединение с сервером баз данных с системы, на которой установлен
MySQL – в рассматриваемом примере drwalbr.und. Для установки соединения с правами администратора сервера баз данных выполните от имени обычного пользователя команду:
[drwalbr@drwalbr |
/]$ mysql -u |
root mysql |
|
|
Reading |
table information for |
completion |
of table and column names |
|
You can |
turn off |
this feature |
to get a quicker startup with -A |
|
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 0 to server version: 4.0.13
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
Вы подключились к серверу баз данных без ввода пароля. Это также может сделать любой пользователь системы drwalbr.und, что очень плохо, с точки зрения безопасности вашей системы. Установите пароль для пользователя root:
mysql> SET PASSWORD FOR root=PASSWORD('$ecretnoe_sL0vo');
Query OK, 0 rows affected (0.00 sec)
Для вступления изменений в силу выполните команду: mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
Отключитесь от сервера баз данных: mysql> \quit
Bye
Шаг 3 Попробуйте вновь установить соединение с сервером баз данных, не вводя пароль:
[drwalbr@drwalbr /]$ mysql -u root -h drwalbr.und
456 |
Часть 8. Программное обеспечение для сервера баз данных |
Вы не сможете установить подключение:
ERROR 1045: Access denied for user: 'root@drwalbr.und' (Using password: NO)
Для подключения к серверу с вводом пароля используйте команду:
[drwalbr@drwalbr /]$ mysql -u root -h drwalbr -p Enter password: $ecretnoe_sL0vo
Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 6 to server version: 4.0.13
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
Шаг 4 Выведите список баз данных, установленных на вашем сервере:
mysql> |
SHOW DATABASES; |
||
+ |
---------- |
|
+ |
| Database | |
|||
+---------- |
|
|
+ |
| mysql |
| |
||
| test |
|
| |
|
+---------- |
|
|
+ |
2 |
rows |
in set (0.00 sec) |
|
В комплект поставки MySQL входит база данных с именeм test, к которой может подключиться без ввода пароля любой пользователь системы, на которой установлен сервер баз данных.
Необходимо удалить базу данных test. Для этого выполните: mysql> DROP DATABASE test;
Query OK, 0 rows affected (0.00 sec)
Убедитесь в том, что база данных test удалена: mysql> SHOW DATABASES;
+ |
---------- |
+ |
| Database | |
||
+---------- |
|
+ |
| mysql |
| |
|
+---------- |
|
+ |
1 |
rows in set (0.00 sec) |
|
Отключитесь от сервера баз данных: mysql> \quit
Bye
и подключитесь к базе данных test в качестве произвольного пользователя, например, xaker:
[drwalbr@drwalbr /]$ mysql -u xaker -h drwalbr.und
Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 9 to server version: 4.0.13
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
Вы, не вводя пароля, установили соединение с сервером баз данных и можете вновь создать базу данных test, то же самое может сделать и любой пользователь системы, имеющий доступ к консоли, на которой установлен сервер баз данных. Это происходит потому что, не смотря на то, что вы удалили базу данных test, в базе данных mysql, предназначенной для хранения информации о полномочиях пользователей, сохранились записи, разрешающие доступ с локальной системы к базе данных test.
Шаг 5 Для удаления этих записей разорвите соединение с сервером баз данных и подключитесь вновь в ка-
честве пользователя root: mysql> \quit Bye
Глава 31. MySQL – сервер баз данных |
457 |
||
[drwalbr@drwalbr /]$ |
mysql -u root -h drwalbr.und –p |
||
Enter password: $ecretnoe_sL0vo |
|
||
Welcome to |
the MySQL |
monitor. |
Commands end with ; or \g. |
Your MySQL |
connection id is 10 |
to server version: 4.0.13 |
|
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
Подключитесь к базе данных mysql: 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:
mysql> |
SHOW TABLES; |
|
+----------------- |
|
+ |
| Tables_in_mysql | |
||
+----------------- |
|
+ |
| columns_priv |
| |
|
| db |
|
| |
| func |
|
| |
| host |
|
| |
| tables_priv |
| |
|
| user |
|
| |
+----------------- |
|
+ |
6 rows |
in set (0.00 sec) |
|
Данные о всех пользователях сервера баз данных хранятся в таблице user. С полным перечнем полей таблицы можно ознакомится с помощью команды:
mysql> DESCRIBE user; |
|
|
|
|
|
+------------------ |
+---------------------- |
+------ |
+----- |
+--------- |
+------- |
+ |
|
|
|
|
|
| Field |
| Type |
| Null | Key | Default | Extra |
|||
| |
|
|
|
|
|
+------------------ |
+---------------------- |
+------ |
+----- |
+--------- |
+------- |
+ |
|
|
|
|
|
| Host |
| varchar(60) binary |
| |
| PRI | |
| |
|
| |
|
|
|
|
|
| User |
| varchar(16) binary |
| |
| PRI | |
| |
|
| |
|
|
|
|
|
| Password |
| varchar(16) binary |
| |
| |
| |
| |
| |
|
|
|
|
|
| Select_priv |
| enum('N','Y') |
| |
| |
| N |
| |
| |
|
|
|
|
|
| Insert_priv |
| enum('N','Y') |
| |
| |
| N |
| |
| |
|
|
|
|
|
| Update_priv |
| enum('N','Y') |
| |
| |
| N |
| |
| |
|
|
|
|
|
| Delete_priv |
| enum('N','Y') |
| |
| |
| N |
| |
| |
|
|
|
|
|
| Create_priv |
| enum('N','Y') |
| |
| |
| N |
| |
| |
|
|
|
|
|
| Drop_priv |
| enum('N','Y') |
| |
| |
| N |
| |
| |
|
|
|
|
|
| Reload_priv |
| enum('N','Y') |
| |
| |
| N |
| |
| |
|
|
|
|
|
| Shutdown_priv |
| enum('N','Y') |
| |
| |
| N |
| |
| |
|
|
|
|
|
458 |
|
Часть 8. Программное обеспечение для сервера баз данных |
||||
| Process_priv |
| |
enum('N','Y') |
| |
| |
| N |
| |
| |
|
|
|
|
|
|
| File_priv |
| |
enum('N','Y') |
| |
| |
| N |
| |
| |
|
|
|
|
|
|
| Grant_priv |
| |
enum('N','Y') |
| |
| |
| N |
| |
| |
|
|
|
|
|
|
| References_priv |
| |
enum('N','Y') |
| |
| |
| N |
| |
| |
|
|
|
|
|
|
| Index_priv |
| |
enum('N','Y') |
| |
| |
| N |
| |
| |
|
|
|
|
|
|
| Alter_priv |
| |
enum('N','Y') |
| |
| |
| N |
| |
| |
|
|
|
|
|
|
| Show_db_priv |
| |
enum('N','Y') |
| |
| |
| N |
| |
| |
|
|
|
|
|
|
| Super_priv |
| |
enum('N','Y') |
| |
| |
| N |
| |
| |
|
|
|
|
|
|
| Create_tmp_ |
| |
enum('N','Y') |
| |
| |
| N |
| |
| |
|
|
|
|
|
|
| table_priv |
| |
|
| |
| |
| |
| |
| |
|
|
|
|
|
|
| Lock_tables_priv | |
enum('N','Y') |
| |
| |
| N |
| |
|
| |
|
|
|
|
|
|
| Execute_priv |
| |
enum('N','Y') |
| |
| |
| N |
| |
| |
|
|
|
|
|
|
| Repl_slave_priv |
| |
enum('N','Y') |
| |
| |
| N |
| |
| |
|
|
|
|
|
|
| Repl_client_priv | |
enum('N','Y') |
| |
| |
| N |
| |
|
| |
|
|
|
|
|
|
| ssl_type |
| |
enum('','ANY','X509' |
| |
| |
| |
| |
| |
|
|
|
|
|
|
| |
| |
'SPECIFIED') |
| |
| |
| |
| |
| |
|
|
|
|
|
|
| ssl_cipher |
| |
blob |
| |
| |
| |
| |
| |
|
|
|
|
|
|
| x509_issuer |
| |
blob |
| |
| |
| |
| |
| |
|
|
|
|
|
|
| x509_subject |
| |
blob |
| |
| |
| |
| |
| |
|
|
|
|
|
|
| max_questions |
| |
int(11) unsigned |
| |
| |
| 0 |
| |
| |
|
|
|
|
|
|
| max_updates |
| |
int(11) unsigned |
| |
| |
| 0 |
| |
| |
|
|
|
|
|
|
| max_connections |
| |
int(11) unsigned |
| |
| |
| 0 |
| |
| |
|
|
|
|
|
|
+------------------+----------------------+------+-----+---------+------- |
||||||
+ |
|
|
|
|
|
|
31 rows in set (0.00 |
sec) |
|
|
|
|
|
а их назначение подробно описано в документации. С точки зрения решаемой задачи, нас интересуют параметры, содержащиеся в полях Host, User, Password и *_priv, в которых находится информация об имени хоста (Host), с которого разрешен доступ пользователю (User) c паролем (Password). В полях *_priv содержится информация о привилегиях пользователя.
Для просмотра содержимого таблицы user выполните: mysql> SELECT * FROM user;
+-------------+------+----------+-------------+------------...
| Host | User | Password | Select_priv | Insert_priv +-------------+------+----------+-------------+------------...
| localhost |
| root | |
| Y |
| Y |
||||
| drwalbr.und |
| root | |
| Y |
| Y |
||||
| |
localhost |
| |
| |
| |
N |
| |
N |
| |
drwalbr.und | |
| |
| |
N |
| |
N |
|
+-------------+------+----------+-------------+------------...
4 rows in set (0.00 sec)
Глава 31. MySQL – сервер баз данных |
459 |
Из полученной информации видно, что установка соединений разрешена любому пользователю (пустые значения в третьей и четвертой строке столбца User) локальной системы без ввода пароля (пустые значения в третьей и четвертой строке столбца Password). При этом пользователь не имеет никаких привилегий на уровне сервера баз данных в целом (символы N в третьей и четвертой строке столбцов *_priv). Привилегии в рассматриваемом случае определяются другой таблицей базы данных mysql – db. С полным перечнем полей таблицы db можно ознакомиться с помощью команды:
mysql> DESCRIBE db; |
|
|
|
|
|
|
|
|
||
+------------------ |
|
|
+ |
----------------- |
+ |
------+----- |
+ |
--------- |
+------- |
+ |
| Field |
|
|
| |
Type |
| Null | Key | |
Default | Extra | |
||||
+------------------ |
|
|
+----------------- |
|
+ |
------+----- |
+--------- |
|
+------- |
+ |
| Host |
|
|
| |
char(60) binary | |
| PRI | |
|
| |
| |
||
| Db |
|
|
| |
char(64) binary | |
| PRI | |
|
| |
| |
||
| User |
|
|
| |
char(16) binary |
| |
| PRI | |
|
| |
| |
|
| Select_priv |
|
| |
enum('N','Y') |
| |
| |
| |
N |
| |
| |
|
| Insert_priv |
|
| |
enum('N','Y') |
| |
| |
| |
N |
| |
| |
|
| Update_priv |
|
| |
enum('N','Y') |
| |
| |
| |
N |
| |
| |
|
| Delete_priv |
|
| |
enum('N','Y') |
| |
| |
| |
N |
| |
| |
|
| Create_priv |
|
| |
enum('N','Y') |
| |
| |
| |
N |
| |
| |
|
| Drop_priv |
|
| |
enum('N','Y') |
| |
| |
| |
N |
| |
| |
|
| Grant_priv |
|
| |
enum('N','Y') |
| |
| |
| |
N |
| |
| |
|
| References_priv |
|
| |
enum('N','Y') |
| |
| |
| |
N |
| |
| |
|
| Index_priv |
|
| |
enum('N','Y') |
| |
| |
| |
N |
| |
| |
|
| Alter_priv |
|
| |
enum('N','Y') |
| |
| |
| |
N |
| |
| |
|
| Create_tmp_ |
|
| |
enum('N','Y') |
| |
| |
| |
N |
| |
| |
|
| table_priv |
|
| |
enum('N','Y') |
| |
| |
| |
N |
| |
| |
|
| Lock_tables_priv |
| |
enum('N','Y') |
| |
| |
| |
N |
| |
| |
||
+------------------ |
|
|
+----------------- |
|
+ |
------+----- |
+--------- |
|
+------- |
+ |
15 rows in set (0.00 |
sec) |
|
|
|
|
|
|
|||
Для просмотра содержимого таблицы db наберите: |
|
|
|
|
|
|||||
mysql> SELECT * FROM |
db; |
|
|
|
|
|
|
|||
+------+---------+------+-------------+-------------+-------------... |
|
|||||||||
| Host | Db |
| |
User | Select_priv | Insert_priv |
| Update_priv |
|
||||||
+------+---------+------+-------------+-------------+-------------... |
|
|||||||||
| % |
| test |
| |
|
| Y |
|
| Y |
|
| Y |
|
|
| % |
| test\_% | |
|
| Y |
|
| Y |
|
| Y |
|
|
|
+------+---------+------+-------------+-------------+-------------...
2 rows in set (0.01 sec)
Из полученного вывода видно, что подключение к базе данных test разрешена любому пользователю (пустые значения в первой и второй строках столбца User), при этом пользователь имеет все привилегии (символы Y в первой и второй строке в столбцах *_priv).
Удалите ненужные записи из таблицы user и db: mysql> DELETE FROM user WHERE User ="";
Query OK, 2 rows affected (0.00 sec)
mysql> DELETE FROM db WHERE Db ="test";
Query OK, 1 row affected (0.00 sec)
mysql> DELETE FROM db WHERE Db ="test\_%";
Query OK, 1 row affected (0.00 sec)
Для вступления изменений в силу выполните команду: mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
Разорвите соединение с сервером: mysql> \quit
Bye
Шаг 6
Попробуйте подключиться к базе данных test c полномочиями пользователя xaker:
460 |
Часть 8. Программное обеспечение для сервера баз данных |
[drwalbr@drwalbr /]$ mysql -u xaker -h drwalbr.und
Вам не удастся установить соединение, а на экране появится сообщение об ошибке:
ERROR 1045: Access denied for user: 'xaker@drwalbr.und' (Using password:
NO)
Монтирование раздела баз данных с атрибутом noatime
Если на вашем сервере каталог, в который установлен MySQL – например, /var/lib – смонтирован на отдельном разделе диска, то для некоторого повышения производительности сервера баз данных можно перемонтировать этот раздел с атрибутом noatime.
Для этого необходимо выполнить следующие операции:
Шаг 1
В файле /etc/fstab замените строку, подобную этой:
/dev/hdb6 |
/var/lib |
ext3 |
defaults |
0 |
1 |
на: |
|
|
defaults,noatime 0 |
|
|
/dev/hdb6 |
/var/lib |
ext3 |
|
1 |
Шаг 2
Перемонтируйте раздел диска, на котором находится каталог /var/lib с атрибутом noatime:
[root@drwalbr /]# mount /var/lib -oremount
Шаг 3 Проверьте атрибуты монтирования дискового раздела с каталогом:
[root@drwalbr/]# cat /proc/mounts |
| grep lib |
|
||
/dev/hdb6 |
/var/lib |
ext3 |
defaults,noatime 0 |
1 |
Пример использования MySQL
Часто при создании интерактивных Web-ресурсов (форумов, поисковых систем и т. п.) начинающие пользователи сталкиваются с проблемой создания единственной базы данных, доступ к которой следует разрешить только определенному пользователю. При этом требуется также вносить некоторые изменения в данные таблиц. Ниже приведен пример создания и модификации данных в такой базе данных.
Шаг 1 Для создания базы данных от имени обычного пользователя установите соединение с сервером баз
данных с полномочиями пользователя root:
[drwalbr@drwalbr /]$ mysql -u root -h drwalbr -p Enter password: $ecretnoe_sL0vo
Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 26 to server version: 4.0.13
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
Создайте базу данных, например, с именем friends_book: mysql> CREATE DATABASE friends_book;
Query OK, 1 row affected (0.00 sec)
Проверьте наличие вновь созданной базы данных: mysql> SHOW DATABASES;
+ |
-------------- |
+ |
| Database |
| |
|
+-------------- |
|
+ |
| friends_book | |
||
| mysql |
| |
|
+-------------- |
|
+ |
2 |
rows in set (0.00 sec) |
|
