Различия
Здесь показаны различия между двумя версиями данной страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
wiki:руководство_по_ubuntu_server:базы_данных:mysql [2012/07/15 13:11] [MySQL] |
wiki:руководство_по_ubuntu_server:базы_данных:mysql [2013/02/20 10:01] (текущий) [Ссылки] |
||
---|---|---|---|
Строка 12: | Строка 12: | ||
====Установка==== | ====Установка==== | ||
- | To install MySQL, run the following command from a terminal prompt: | + | Для установки MySQL запустите следующую команду из терминала: |
+ | <code>sudo apt-get install mysql-server</code> | ||
+ | <note>Начиная с Ubuntu 12.04, MySQL 5.5 устанавливается по умолчанию. Несмотря на 100% совместимость с MySQL 5.1, при необходимости установить версию 5.1 (например в качестве зависимой базы к другим MySQL 5.1 серверам), вы можете заменить устанавливаемый пакет на mysql-server-5.1.</note> | ||
- | sudo apt-get install mysql-server | + | В процессе установки у вас запросят пароль для пользователя root под MySQL. |
- | As of Ubuntu 12.04, MySQL 5.5 is installed by default. Whilst this is 100% compatible with MySQL 5.1 should you need to install 5.1 (for example to be a slave to other MySQL 5.1 servers) you can install the mysql-server-5.1 package instead. | + | Как только установка завершится, сервер MySQL запустится автоматически. Вы можете использовать следующую команду в терминале для проверки, что сервер MySQL запущен: |
- | + | <code>sudo netstat -tap | grep mysql</code> | |
- | During the installation process you will be prompted to enter a password for the MySQL root user. | + | Когда вы запустите эту команду, ввы сможете увидеть что-то похожее на следующую строку: |
- | + | <code>tcp 0 0 localhost:mysql *:* LISTEN 2556/mysqld</code> | |
- | Once the installation is complete, the MySQL server should be started automatically. You can run the following command from a terminal prompt to check whether the MySQL server is running: | + | Если сервер не работает, вы можете набрать следующую команду для его запуска: |
- | + | <code>sudo service mysql restart</code> | |
- | sudo netstat -tap | grep mysql | + | |
- | + | ||
- | When you run this command, you should see the following line or something similar: | + | |
- | + | ||
- | tcp 0 0 localhost:mysql *:* LISTEN 2556/mysqld | + | |
- | + | ||
- | If the server is not running correctly, you can type the following command to start it: | + | |
- | + | ||
- | sudo service mysql restart | + | |
====Настройка==== | ====Настройка==== | ||
- | You can edit the /etc/mysql/my.cnf file to configure the basic settings -- log file, port number, etc. For example, to configure MySQL to listen for connections from network hosts, change the bind-address directive to the server's IP address: | + | Вы можете отредактировать файл /etc/mysql/my.cnf для настройки основных параметров - файл журнала, номер порта и пр. Например, чтобы настроить MySQL на ожидание подключений от компьютеров в сети, измените параметр **bind-address** на IP адрес сервера: |
+ | <code>bind-address = 192.168.0.5</code> | ||
+ | <note>Замените 192.168.0.5 на реальное значение адреса вашего сервера.</note> | ||
+ | После изменений в /etc/mysql/my.cnf сервис MySQL нужно перезагрузить: | ||
+ | <code>sudo service mysql restart</code> | ||
+ | Если вам потребовалось сменить пароль пользователя root в MySQL, введите в терминале: | ||
+ | <code>sudo dpkg-reconfigure mysql-server-5.5</code> | ||
+ | Сервис MySQL будет остановлен и вас попросят ввести новый пароль. | ||
- | bind-address = 192.168.0.5 | + | ====Драйверы базы данных==== |
- | Replace 192.168.0.5 with the appropriate address. | + | Хотя конфигурация по умолчанию для MySQL, предоставляемая пакетами Ubuntu, имеет великолепную функциональность и работает достаточно хорошо, есть некоторые вещи, которые вы можете решить до того как продолжить. |
- | After making a change to /etc/mysql/my.cnf the MySQL daemon will need to be restarted: | + | MySQL разработан так, что позволяет хранить данные по-разному. Эти варианты относятся к драйверам (управляющим модулям - engines) как баз данных, так и хранилищ. Существует два основных драйвера, которые вам могут быть интересны: **InnoDB** и **MyISAM**. Драйверы хранилищ прозрачны (незаметны) конечным пользователям. MySQL управляет событиями по-разному на нижнем уровне, но независимо от того, какая система хранения данных используется, вы будете взаимодействовать с базой одним и тем же способом. |
- | sudo service mysql restart | + | Каждый драйвер имеет свои преимущества и недостатки. |
- | If you would like to change the MySQL root password, in a terminal enter: | + | Хотя смешивание и связывание драйверов баз данных на уровне таблиц разрешается и может быть привлекательным, это снижает эффективность настройки производительности, которую вы смогли бы провести при разделении ресурсов между двумя системами вместо замешивания их в одно целое. |
- | sudo dpkg-reconfigure mysql-server-5.5 | + | -- **MyISAM** более старая из двух. Она может быть быстрее InnoDB при определенных обстоятельствах и предпочтительна при рабочей нагрузке, ориентированной на чтение данных. Некоторые интернет приложения настроены на использование именно MyISAM (однако это не означает, что они будут медленнее под InnoDB). MyISAM также поддерживает тип данных **FULLTEXT**, который позволяет осуществлять очень быстрый поиск по большому количеству текстовых данных. Однако MyISAM поддерживает блокировку записи только на уровне таблиц. Это означает, что только один процесс может изменять данные в таблице в один момент времени. Поскольку некоторые приложения, использующие таблицу, могут масштабироваться (работать несколькими экземплярами - scales), это может стать серьезной помехой. Здесь также отсутствует журналирование, что может усложнить восстановление данных после сбоя. Следующая ссылка предоставляет некоторые соображения по использованию [[http://www.mysqlperformanceblog.com/2006/06/17/using-myisam-in-production/|MyISAM в работающей базе данных]]. |
+ | -- **InnoDB** - более современный драйвер, созданный по принципам [[http://ru.wikipedia.org/wiki/ACID|ACID]], что гарантирует надежную обработку транзакций базы данных. Блокировка записи производится на уровне одной записи в таблице. Это означает возможность нескольких изменений в одной таблице одновременно. Кэширование данных происходит также и в оперативной памяти внутри драйвера базы данных, позволяя кэшировать более эффективно чем на уровне блоков файлов. В соответствии с **ACID** все транзакции журналируются независимо от основных таблиц. Это позволяет намного более надежно восстанавливать данные при проверке целостности данных. | ||
- | The MySQL daemon will be stopped, and you will be prompted to enter a new password. | + | Начиная MySQL 5.5 **InnoDB** является драйвером по умолчанию и настоятельно рекомендуется вместо **MyISAM**, если только у вас нет специфических потребностей, уникальных для этого драйвера. |
- | + | ||
- | ====Движки базы данных==== | + | |
- | + | ||
- | Whilst the default configuration of MySQL provided by the Ubuntu packages is perfectly functional and performs well there are things you may wish to consider before you proceed. | + | |
- | + | ||
- | MySQL is designed to allow data to be stored in different ways. These methods are referred to as either database or storage engines. There are two main engines that you'll be interested in: InnoDB and MyISAM. Storage engines are transparent to the end user. MySQL will handle things differently under the surface, but regardless of which storage engine is in use, you will interact with the database in the same way. | + | |
- | + | ||
- | Each engine has its own advantages and disadvantages. | + | |
- | + | ||
- | While it is possible, and may be advantageous to mix and match database engines on a table level, doing so reduces the effectiveness of the performance tuning you can do as you'll be splitting the resources between two engines instead of dedicating them to one. | + | |
- | + | ||
- | MyISAM is the older of the two. It can be faster than InnoDB under certain circumstances and favours a read only workload. Some web applications have been tuned around MyISAM (though that's not to imply that they will slow under InnoDB). MyISAM also supports the FULLTEXT data type, which allows very fast searches of large quantities of text data. However MyISAM is only capable of locking an entire table for writing. This means only one process can update a table at a time. As any application that uses the table scales this may prove to be a hindrance. It also lacks journaling, which makes it harder for data to be recovered after a crash. The following link provides some points for consideration about using MyISAM on a production database. | + | |
- | + | ||
- | InnoDB is a more modern database engine, designed to be ACID compliant which guarantees database transactions are processed reliably. Write locking can occur on a row level basis within a table. That means multiple updates can occur on a single table simultaneously. Data caching is also handled in memory within the database engine, allowing caching on a more efficient row level basis rather than file block. To meet ACID compliance all transactions are journaled independently of the main tables. This allows for much more reliable data recovery as data consistency can be checked. | + | |
- | + | ||
- | As of MySQL 5.5 InnoDB is the default engine, and is highly recommended over MyISAM unless you have specific need for features unique to the engine. | + | |
====Расширенные настройки==== | ====Расширенные настройки==== | ||
Строка 70: | Строка 55: | ||
===Создание настроенного файла my.cnf=== | ===Создание настроенного файла my.cnf=== | ||
- | There are a number of parameters that can be adjusted within MySQL's configuration file that will allow you to improve the performance of the server over time. For initial set-up you may find Percona's my.cnf generating tool useful. This tool will help generate a my.cnf file that will be much more optimised for your specific server capabilities and your requirements. | + | Существует ряд параметров, которые могут быть указаны в файле настроек MySQL, что со временем позволит вам повысить производительность вашего сервера. Для начальной настройки вам может пригодиться [[http://tools.percona.com/members/wizard|Percona's my.cnf generating tool]]. Этот инструмент позволит вам создать файл my.cnf более оптимизированный под специфические возможности вашего сервера и ваши требования. |
- | Do not replace your existing my.cnf file with Percona's one if you have already loaded data into the database. Some of the changes that will be in the file will be incompatible as they alter how data is stored on the hard disk and you'll be unable to start MySQL. If you do wish to use it and you have existing data, you will need to carry out a mysqldump and reload: | + | **Не меняйте** ваш существующий файл my.cnf на созданный утилитой, если у вас уже загружены данные в вашу базу данных. Некоторые изменения в этом файле могут быть несовместимы, если вы поменяли то, как хранятся данные на диске, после чего вы не сможете запустить MySQL. Если вы все же решили это сделать и у вас есть данные в базе, вам потребуется выполнить **mysqldump** и загрузить данные повторно: |
- | + | <code>mysqldump --all-databases --all-routines -u root -p > ~/fulldump.sql</code> | |
- | mysqldump --all-databases --all-routines -u root -p > ~/fulldump.sql | + | Эта операция запросит пароль пользователя root перед созданием копии данных. Желательно убедиться, что другие пользователи и процессы не используют базу во время этой операции. В зависимости от количества данных в вашей базе, это может занять длительное время. Вы не увидите ничего на экране во время этого процесса. |
- | + | ||
- | This will then prompt you for the root password before creating a copy of the data. It is advisable to make sure there are no other users or processes using the database whilst this takes place. Depending on how much data you've got in your database, this may take a while. You won't see anything on the screen during this process. | + | |
- | + | ||
- | Once the dump has been completed, shut down MySQL: | + | |
- | + | ||
- | sudo service mysql stop | + | |
- | + | ||
- | Now backup the original my.cnf file and replace with the new one: | + | |
+ | Как только файл выгрузки создан, остановите MySQL: | ||
+ | <code>sudo service mysql stop</code> | ||
+ | Теперь сохраните оригинальный файл my.cnf и замените его на новый: | ||
+ | <code> | ||
sudo cp /etc/my.cnf /etc/my.cnf.backup | sudo cp /etc/my.cnf /etc/my.cnf.backup | ||
sudo cp /path/to/new/my.cnf /etc/my.cnf | sudo cp /path/to/new/my.cnf /etc/my.cnf | ||
- | + | </code> | |
- | Then delete and re-initialise the database space and make sure ownership is correct before restarting MySQL: | + | Затем удалите и создайте заново пространство базы данных, а также убедитесь в корректности его владельца перед запуском MySQL: |
+ | <code> | ||
sudo rm -rf /var/lib/mysql/* | sudo rm -rf /var/lib/mysql/* | ||
sudo mysql_install_db | sudo mysql_install_db | ||
sudo chown -R mysql: /var/lib/mysql | sudo chown -R mysql: /var/lib/mysql | ||
sudo service start mysql | sudo service start mysql | ||
- | + | </code> | |
- | Finally all that's left is to re-import your data. To give us an idea of how far the import process has got you may find the 'Pipe Viewer' utility, pv, useful. The following shows how to install and use pv for this case, but if you'd rather not use it just replace pv with cat in the following command. Ignore any ETA times produced by pv, they're based on the average time taken to handle each row of the file, but the speed of inserting can vary wildly from row to row with mysqldumps: | + | Теперь все, что осталось - это импортировать ваши данные. Чтобы дать нам представление как идет процесс импорта, полезно использовать утилиту %%'Pipe Viewer'%% (pv). Далее показано как установить и использовать **pv** для этого случая, но если вы не хотите ее использовать, просто замените **pv** на **cat** в соответствующей команде. Не обращайте внимание на время ETA (расчетное время окончания), генерируемое pv, поскольку оно основывается на среднем времени обработки каждой записи при сохранении в файл, однако скорость может сильно меняться от записи к записи при использовании **mysqldumps**: |
+ | <code> | ||
sudo apt-get install pv | sudo apt-get install pv | ||
pv ~/fulldump.sql | mysql | pv ~/fulldump.sql | mysql | ||
+ | </code> | ||
+ | Когда все завершится, это будет означать что все получилось! | ||
- | Once that is complete all is good to go! | + | <note>Эта операция не обязательна для всех изменений my.cnf. Многие значения, которые вы захотите поменять для улучшения производительности сработают даже на работающем сервере. Но как всегда не забудьте сделать надежную копию файлов настроек и данных перед внесением изменений.</note> |
- | + | ||
- | This is not necessary for all my.cnf changes. Most of the variables you may wish to change to improve performance are adjustable even whilst the server is running. As with anything, make sure to have a good backup copy of config files and data before making changes. | + | |
===MySQL Tuner=== | ===MySQL Tuner=== | ||
- | MySQL Tuner is a useful tool that will connect to a running MySQL instance and offer suggestions for how it can be best configured for your workload. The longer the server has been running for, the better the advice mysqltuner can provide. In a production environment, consider waiting for at least 24 hours before running the tool. You can get install mysqltuner from the Ubuntu repositories: | + | **MySQL Tuner** - это полезный инструмент, который подсоединяется к работающему MySQL и предлагает варианты как можно улучшить настройки для вашей рабочей нагрузки. Чем дольше работает сервер, тем лучше рекомендации предоставит **mysqltuner**. Для рабочего окружения подождите как минимум 24 часа прежде чем запускать утилиту. Вы можете установить **mysqltuner** из хранилища Ubuntu: |
- | + | <code>sudo apt-get install mysqltuner</code> | |
- | sudo apt-get install mysqltuner | + | После установки запустите ее: |
- | + | <code>mysqltuner</code> | |
- | Then once its been installed, run it: | + | и ждите ее финального отчета. Верхняя секция предоставляет общую информацию а сервере баз данных, а нижняя часть содержит рекомендации по настройке, необходимые для изменения вашего my.cnf. Многие из них могут быть поправлены вживую на сервере без перезагрузки. Смотрите официальную документацию MySQL (указанную в разделе [[#ссылки|Ссылки]]) для перечня параметров, изменяемых %%"налету"%%. Далее часть примерного отчета по работающей базе, который показывает, что можно извлечь некоторую пользу от увеличения размера кэша запросов: |
- | + | <code> | |
- | mysqltuner | + | |
- | + | ||
- | and wait for its final report. The top section provides general information about the database server, and the bottom section provides tuning suggestions to alter in your my.cnf. Most of these can be altered live on the server without restarting, look through the official MySQL documentation (link in Resources section) for the relevant variables to change in production. The following is part of an example report from a production database which shows there may be some benefit from increasing the amount of query cache: | + | |
-------- Recommendations ----------------------------------------------------- | -------- Recommendations ----------------------------------------------------- | ||
General recommendations: | General recommendations: | ||
Строка 124: | Строка 101: | ||
table_cache (> 64) | table_cache (> 64) | ||
innodb_buffer_pool_size (>= 22G) | innodb_buffer_pool_size (>= 22G) | ||
- | + | </code> | |
- | One final comment on tuning databases: Whilst we can broadly say that certain settings are the best, performance can vary from application to application. For example, what works best for Wordpress might not be the best for Drupal, Joomla or proprietary applications. Performance is dependent on the types of queries, use of indexes, how efficient the database design is and so on. You may find it useful to spend some time searching for database tuning tips based on what applications you're using it for. Once you get past a certain point any adjustments you make will only result in minor improvements, and you'll be better off either improving the application, or looking at scaling up your database environment through either using more powerful hardware or by adding slave servers. | + | **//Один финальный комментарий по настройке базы данных//**: Хотя мы можем утверждать что определенные настройки самые лучшие, производительность может изменяться от приложения к приложению. Например, что работает великолепно для Wordpress, может оказаться не лучшим для Drupal, Joomla или проприетарных приложений. Производительность зависит от типов запросов, использования индексов, насколько эффективно спроектирована база данных и т.д. Вы можете посчитать полезным потратить некоторое время на поиск настроек базы данных под используемые вами приложения. Как только вы пройдете определенную точку, любые ваши изменения будут приводить к минимальным улучшениям и вам будет лучше либо заняться улучшением ваших приложений, либо масштабировать вашу базу данных, используя более производительное оборудование или добавляя зависимые сервера. |
====Ссылки==== | ====Ссылки==== | ||
- | See the MySQL Home Page for more information. | + | -- Смотрите [[http://www.mysql.com/|домашнюю страницу MySQL]] для дополнительной информации. |
- | + | -- Полная документация доступна в форматах как онлайн, так и оффлайн по ссылке [[http://dev.mysql.com/doc/|MySQL Developers portal]]. | |
- | Full documentation is available in both online and offline formats from the MySQL Developers portal | + | -- Для общей информации по SQL смотрите [[http://www.informit.com/store/product.aspx?isbn=0768664128|Using SQL Special Edition]] от Rafe Colburn. |
- | + | -- Страница [[https://help.ubuntu.com/community/ApacheMySQLPHP|Apache MySQL PHP Ubuntu Wiki]] также содержит полезную информацию. | |
- | For general SQL information see Using SQL Special Edition by Rafe Colburn. | + | |
- | + | ||
- | The Apache MySQL PHP Ubuntu Wiki page also has useful information. | + | |
---- | ---- |