MySQL/Startup Guide/ru

Этот документ поможет пользователю в настройке и использовании MySQL.

Основы
MySQL - это популярный сервер баз данных, который используется в разных приложениях. SQL означает язык структурированных запросов - (S)tructured (Q)uery (L)anguage, который MySQL использует для коммуникации с другими программами. Сверх того, MySQL имеет свои собственные расширенные функции SQL для того чтобы обеспечить пользователям дополнительный функционал. В этом документе мы рассмотрим как провести первоначальную установку MySQL, настроить базы данных и таблицы, и создать новых пользователей. Давайте начнем с установки.

Установка MySQL
Сначала убедитесь что MySQL установлена на вашу систему. В случае если Вам требуется определенная функциональность MySQL, убедитесь, что необходимые USE-флаги включены, так как они помогут в тонкой настройке Вашей установки.

По завершении установки, Вы увидите следующее уведомление:

MySQL einfo message

Так как это новая установка, мы запустим эту команду. Вам надо нажать, когда это будет запрошено во время конфигурации базы данных MySQL. Эта конфигурация настраивает основную базу данных MySQL, которая содержит административную информацию, такую как базы данных, таблицы, пользователи, разрешения и т.д. Конфигурация рекомендует чтобы Вы изменили свой пароль root настолько быстро, насколько это возможно. Мы определенно это сделаем, иначе кто-нибудь сможет случайно войти и взломать установку сервера MySQL по умолчанию.

Некоторая нехарактерная для ebuild-файлов информация MySQL удалена отсюда, чтобы содержать этот документ настолько последовательным, насколько возможно.

Сценарий конфигурации уже вывел команды, которые нам нужно запустить, чтобы настроить наш пароль, поэтому нам сейчас надо их выполнить.

Теперь Вы можете проверить, что пароль root был успешно настроен, попытавшись войти на MySQL-сервер:

Параметр  устанавливает пользователя, который будет выполнять вход. Параметр  устанавливает хост. Обычно это будет, если только Вы не настраиваете удаленный сервер. И, наконец,  сообщает клиенту mysql что Вы будете вводить пароль для доступа к базе данных. Заметьте командную строку. Это то место, где Вы будете вводить все Ваши команды. Теперь, когда мы в командной строке mysql в качестве пользователя root, мы можем начать настраивать нашу базу данных.

Создание Базы Данных
Мы вошли и командная строка mysql отображена. Сначала, давайте рассмотрим базы данных, который у нас имеются в настоящий момент. Чтобы это сделать, мы используем команду.

Вопреки тому факту, что тестовая база данных уже создана, мы собираемя создать нашу собственную. Базы данных создаются с использованием команды. Мы создадим одну из них с названием gentoo.

Ответ позволяет нам узнать, что команда была выполнена без ошибок. В этом случае, одна строка была изменена. Это является ссылкой на основную базу данных mysql, которая содержит список всех баз данных. Вам не нужно сильно беспокоиться о деталях заднего плана. Последнее число является характеристикой того, насколько быстро был выполнен запрос. Мы можем проверить, что база данных была создана запуском команды  снова.

В самом деле, наша база данных была создана. Для того чтобы работать с созданием таблиц для нашей новой базы данных gentoo, нам надо выбрать ее в качестве текущей базы данных. Чтобы это сделать, мы используем команду. Команда  принимает имя базы данных, которую Вы хотите использовать в качестве текущей. Другой возможностью является ее установка в командной строке после параметра. Давайте продолжим и переключимся к базе данных gentoo.

Сейчас, текущей базой данных является наша созданная ранее база данных gentoo. Теперь, когда мы ее используем, мы можем начать создавать таблицы и заполнять их информацией.

Создание Таблицы
В структуре MySQL, присутствуют базы данных, таблицы, записи, и поля. Базы данных объединяют таблицы, таблицы объединяют записи, записи объединяют поля, которые содержат действительную информацию. Эта структура позволяет пользователям выбирать как они хотят получить доступ к их информации. На данный момент, мы разобрались с базами данных, теперь давайте поработаем с таблицами. Во-первых, таблицы могут быть перечислены, подобно базам данных, с использованием команды. Сейчас, в базе данных gentoo не имеется таблиц, как и показывает нам следующая команда:

Это означает нам надо создать какие-либо таблицы. Чтобы это сделать, мы используем команду. Однако, эта команда достаточно отличается от простой команды. Эта команда принимает список аргументов. Форма команды следует ниже:

CREATE TABLE Syntax

table_name - это имя таблицы, которую мы хотим создать. В данном случае, давайте создадим таблицу с именем. Эта таблица будет хранить имя разработчика, email адрес и работу. field_name будет хранить имя поля. В этом случае мы имеем три требуемых имени: имя разработчика, email адрес, и работу. field_data_type - это то, какой тип информации будет сохранен. Различные доступные форматы могут быть найдены по адресу MySQL Column Types Page. Для наших целей, мы будем использовать тип данных  для всех наших полей. - это один из простейших типов данных, когда дело касается работы со строками. size - это то, как много данных будет хранить одно поле. В нашем случае, мы будем использовать 128. Это означает, что поле будет иметь данные, которые занимают 128 байт. Вы можете спокойно думать об этом как о 128 символах в настоящий момент, хотя существует более техническое объяснение, которое Вам предоставит сайт, указанный выше. Теперь, когда мы знаем как мы создадим таблицу, давайте это сделаем.

Looks like our table was created ok. Let's check it with the  command:

Yes, there's our table. However, it doesn't seem to have any information on the types of fields we setup. For that, we use the  command (or   for short), which takes the name of the table as its argument. Let's see what that gives us for our developers table.

This shows the different fields and their types. It also shows a few extra attributes that are beyond the scope of this howto. Feel free to refer to the MySQL Reference Manual for more information. We now have a table to work with. Now let's go ahead and populate it.

Populating Our MySQL Database
We populate a table (or add data) using the  command. Like the  command, it also has a specific format:

INSERT Syntax

This command is used to insert a record into table. table contains the MySQL table we wish to enter the information into. The table name may be followed by the list of columns to insert data into and  contains the values you wish to insert into the table. You may omit the list of columns if you insert a value into each one and if you write the values in the same order the columns have been defined. In this case, we want to insert data into the developers table. Let's insert sample records:

According to our return result, it appears that the record was inserted correctly. What if we want to input more information than just one record? That's where the  command comes into play. This loads records from a tab separated file. Let's try that by editing a file in our home directory with the records. We'll call this file. Here's a sample:

~/records.txt

Now the  command has a somewhat elongated definition, but we'll use the simplest form here.

LOAD DATA Syntax

is the directory and filename that will be used. table is the name of our table. In this case, our file is and the table is developers.

That worked well. However, this simply inserts records, and does not give you any sort of control over MySQL. Many web applications use sql scripts in order to setup MySQL quickly and easily. If you want to use an sql script, you'll need to run mysql in batch mode, or source the file. Here's an example of running mysql in batch mode:

Like , be sure you can tell what  does. Failure to do so may cause your database to be compromised! Another way you can accomplish this is to use the  command. This command will run mysql commands from an sql file while in the mysql interactive mode. Here is how to source an sql file:

If you see a web application wanting you to run an sql file, the two above commands can be used to accomplish that task. We have our table setup, so how do we check our fields? We do this by searching our table with queries.

Browsing MySQL Tables With Queries
Queries are one of the main features of any SQL database. They help us turn data in our tables into something useful. Most queries are done with the  command. The  command is fairly complex, and we're only going to look at three main forms of the command in this document.

SELECT forms

Let's take a quick look at the first form. It's relatively simple and gives you an overall look of your table. We'll go ahead and run it to see what data we have so far.

We see both the data we inserted through  and those inserted by   present. Now, let's say that we just want to see the record for Chris White. We can do so with the second form of select as shown below.

As expected, the specific entry that we were looking for has been selected. Now, let's say we only wanted to know the person's job and email address, not their name. We can do so with the third form of  as shown here.

This method of selection is a lot easier to manage, expecially with larger amounts of information, as we'll see later on. Right now, being the root mysql user, we have unlimited permissions to do what we wish with the MySQL database. In a server environment, a user with such privileges can be quite problematic. In order to control who does what with the databases, we setup privileges.

Granting Privileges with GRANT
Privileges are what kind of access users have to databases, tables, pretty much anything. Right now in the gentoo database, the MySQL root account is the only account that can access it, given its permissions. Now, let's create two somewhat generic users, guest and admin, who will access the gentoo database and work with the information in it. The guest account will be a restricted one. All it will be able to do is get information from the database, and that's it. admin will have the same control as root, but only for the gentoo database (not the main mysql databases). Before we start on that, let's have a closer look at this somewhat simplified format of the  command.

GRANT Syntax

First we have the privileges we wish to assign. With what we've learned so far, here are some of the privileges you can set:


 * - Gives the all privilege control for the database
 * - Allows users to create tables
 * - Allows users to query tables
 * - Allows users to insert data into a table
 * - Allows users to see a list of databases
 * - User has no privileges
 * - Allows users to grant privileges

For our admin user, ALL will do. For the guest user,  will be sufficient for read only access. database is the database we wish the user to have these permissions on. In this example, gentoo is the database. The .* means all tables. If you wanted to, you could apply per table access. user is the name of the user and host is the hostname the user will be accessing from. In most cases, this will be localhost. Finally, password is the user's password. Given the information, let's go ahead and create our users.

Now that we have the users setup, let's test them out. First we quit mysql by typing  at the command prompt:

We're now back at the console. Now that we have our users setup, let's go ahead and see what they can do.

Testing User Permissions
We shall now attempt to login as the guest user. Currently, the guest user has  only privileges. This basically comes down to being able to search and nothing more. Go ahead and login with the guest account.

Now we should test the user restriction(s). Let's switch to the gentoo database:

Now let's try to do something we are not supposed to. We'll attempt to create a table.

As you can see, this function fails, as our user does not have the appropriate access. However, one access we did grant is the  statement. Let's go ahead and try that:

The command succeeds, and we're given a glimpse of what user permissions can do. We did, however, create an admin account as well. This was created to show that even all permissions granted users can still have limitations. Go ahead and quit MySQL and login as the admin.

To begin, we'll try creating a new database with our admin user. This admin user will have access similiar to the root MySQL account, and will be able to do any kind of modification to the gentoo database it chooses. This will test the user's access to the main MySQL database. Remember ealier that we only set permissions to a specific database.

Indeed, the admin user cannot create databases on the main MySQL database, despite all his permissions on the gentoo database. However, we're still able to use the admin account to modify the gentoo database, as shown here by this example data insertion.

The admin user can access the database as they please. Now sometimes, we need to get rid of user permissions. This could be anything from a problematic user to a retired employee. Let's take a look at how to disable user permissions with the  command.

Removing User Access With The REVOKE Command
The  command lets us deny access to a user. We can either deny full access, or specific access. In fact, the format is very similiar to.

REVOKE Syntax

Options here are explained in the  command section. In this section however, we're going to deny full access to a user. Let's say we find out the guest account is causing some problems security wise. We decide to revoke all privileges. We login as root and do the needful.

Now let's quit and attempt to login as a guest user.

Although we're able to login, our access to gentoo is now gone.

And our problematic user is no longer able to access the gentoo database. Please note that the user was still able to login. That is because they remain in the main MySQL database. Let's take a look at how to completely remove an account with  and the MySQL user table.

Removing Accounts Using DELETE
The MySQL user table is a listing of all users and information about them. Make sure you're logged in as root. Then go ahead and use the main MySQL database.

Now let's see what tables the mysql database has:

The user table is the table we're after. However, the user table contains 30 different fields, making it very hard to read. In order to make things easier to read, we'll go ahead and use the third version of the  statement. The fields we're after are Host and User.

Now that we have our information, we can get rid of the guest user. This is done with the  command and the syntax is shown below.

DELETE Syntax

You may notice that  is somewhat similiar to the   statement in its format. In this case, the field will be User, and the value guest. This will delete the record in the user table where the user is guest, successfully deleting our guest user account. Let's go ahead and do that:

It seems to have worked ok. Let's test by logging out and attempting to login as our guest user.

Our user is now successfully deleted!

Conclusion
While this guide focuses mainly on setting up MySQL on the command line, a few alternatives are available in GUI form:


 * phpMyAdmin - Popular php based MySQL administration tool.
 * mysqlnavigator - QT frontend to MySQL.
 * gmyclient - A GNOME based MySQL client.
 * knoda - A KDE MySQL client.

This ends the MySQL introductory tutorial. I hope this gives you a better understanding of the basics behind MySQL and getting a database set up.

Acknowledgements
We would like to thank the following authors and editors for their contributions to this guide:


 * Chris White
 * Shyam Mani
 * Xavier Neys