Устраняем типичные ошибки в mysql
Содержание:
- Opzioni di mysqladmin
- Резервное копирование журналаBack up the log
- Информация о файле mysqld.exe
- Client connection[edit]
- Многопоточная репликация
- mysqladmin Commands
- Создание пользователя mysql
- Installation[edit]
- Privileges[edit]
- 1: Настройка MySQL для поддержки удаленных соединений
- Почему не запускается MySQL сервер?
Opzioni di mysqladmin
Opzione | Spiegazione |
---|---|
Numero di iterazioni da eseguire. Funziona solo con -i (). | |
Controlla la memoria e l’utilizzo dei file aperti prima di uscire. | |
Stampa le informazioni di debug ed esce. | |
Non chiede conferma prima di eliminare un database; ripetendo più volte il comando, continua anche se si verificano degli errori. | |
Utilizza la compressione nel protocollo server/client. | |
Directory dei set di caratteri. | |
Imposta il set di caratteri predefinito. | |
Mostra questo help ed esce. | |
Si connette all’host specificato. | |
Disattiva i beep in caso di errore. | |
Password da usare per connettersi al server. Se non viene specificata, verrà chiesta da tty. | |
Numero di porta da usare per la connessione, o 0 per usare la porta di default specificata, in ordine di preferenza, in my.cnf, $MYSQL_TCP_PORT, /etc/services o il default built-in (3306). | |
Il protocollo da usare per la connessione (tcp, socket, pipe, memory). | |
Mostra le differenze tra i valori attuali e quelli precedenti, se usato con -i. Attualmente funziona solo con extended-status. | |
Modifica il valore di una variabile. Si noti che questa opzione è deprecata; è possibile impostare la variabile direttamente con . | |
Termina silenziosamente se non può connettersi al server. | |
Il file del socket da usare per la connessione. | |
Esegue i comandi ripetutamente, lasciando trascorrere l’intervallo di tempo specificato. | |
Abilita le connessioni SSL (abilitato automaticamente se si usano gli altri flag). Si può disabilitare con ». | |
File CA nel formato PEM (si veda la documentazione diOpenSSL, implica ). | |
Directory CA (si veda la documentazione diOpenSSL, implica ). | |
Certificato X509 nel formato PEM (implica ). | |
Cifratura SSL da usare (implica ). | |
Chiave X509 nel formato PEM (implica ). | |
Verifica il «Common Name» nel certificato con il nome host usato per connettersi. Questa opzione è disabilitata per default.. | |
Nome utente da usare per il login, se non è quello corrente. | |
Stampa più informazioni. | |
Stampa il numero di versione e termina. | |
Stampa l’output verticalmente. Simile a », ma stampa l’output verticalmente. | |
Attende e riprova se la connessione fallisce. | |
Резервное копирование журналаBack up the log
Для полных моделей восстановления и моделей с неполным протоколированием резервное копирование может предотвратить усечение журнала транзакций, если оно не было сделано недавно.Under the full recovery model or bulk-logged recovery model, if the transaction log has not been backed up recently, backup might be what is preventing log truncation. Если резервная копия журнала создается в первый раз, следует сделать вторую резервную копию журнала , чтобы разрешить компоненту Компонент Database EngineDatabase Engine усечение журнала до точки последнего резервного копирования.If the log has never been backed up, you must create two log backups to permit the Компонент Database EngineDatabase Engine to truncate the log to the point of the last backup. Усечение журнала освобождает пространство для новых записей журнала.Truncating the log frees space for new log records. Чтобы избежать повторного переполнения журнала, следует чаще выполнять резервное копирование.To keep the log from filling up again, take log backups frequently.
Создание резервной копии журнала транзакцийTo create a transaction log backup
-
SqlBackup (SMO)SqlBackup (SMO)
Освобождение места на дискеFreeing disk space
Возможно, следует освободить место на диске, где находится файл журнала транзакций для базы данных. Для этого можно удалить или переместить другие файлы.You might be able to free disk space on the disk drive that contains the transaction log file for the database by deleting or moving other files. Освобожденное место на диске позволит системе восстановления автоматически увеличить размер файла журнала.The freed disk space allows the recovery system to enlarge the log file automatically.
Перемещение файла журнала на другой дискMove the log file to a different disk
Если на текущем диске невозможно освободить достаточное количество места, следует переместить файл на другой диск, где места достаточно.If you cannot free enough disk space on the drive that currently contains the log file, consider moving the file to another drive with sufficient space.
Перемещение файла журналаMove a log file
Перемещение файлов базы данныхMove Database Files
Увеличение размера файла журналаIncrease log file size
Если на диске, на котором находится журнал, доступно свободное место, можно увеличить размер файла журнала.If space is available on the log disk, you can increase the size of the log file. Максимальный объем файлов журнала составляет 2 терабайта (ТБ) на файл журнала.The maximum size for log files is two terabytes (TB) per log file.
Увеличение размера файлаIncrease the file size
Если автоувеличение отключено, база данных находится в режиме «в сети» и на диске достаточно свободного места, выполните одно из следующих действий.If autogrow is disabled, the database is online, and sufficient space is available on the disk, either:
-
Вручную увеличьте размер файла для получения одного шага роста размера файла.Manually increase the file size to produce a single growth increment.
-
Включить свойство автоматического увеличения при помощи инструкции ALTER DATABASE, чтобы установить отличное от нуля значение шага роста для параметра FILEGROWTH.Turn on autogrow by using the ALTER DATABASE statement to set a non-zero growth increment for the FILEGROWTH option.
Добавление файла журнала на другой дискAdd a log file on a different disk
Добавьте новый файл журнала базы данных на другом диске, где достаточно места, с помощью инструкции ALTER DATABASE <имя_базы_данных> ADD LOG FILE.Add a new log file to the database on a different disk that has sufficient space by using ALTER DATABASE <database_name> ADD LOG FILE.
Добавление файла журналаAdd a log file
Добавление файлов данных или журналов в базу данныхAdd Data or Log Files to a Database
Информация о файле mysqld.exe
Процесс MySQL Server (версия 5.1, 5.5, 5.6, 5.7, 6.0) или MySQL или WampServer (версия 2.5, 2.2) или Remote Access DB или The MySQL Server или CONNECT или Dell Remote Access или joomlaMySQL принадлежит программе MySQL Server или XAMPP или WampServer или NVMS5 Standard Edition или Squeezebox Server или ProcessMaker или MySQL Database Server или Bitnami WordPress Stack или Dell Remote Access от Oracle (www.oracle.com) или MySQL AB (www.mysql.com) или MariaDB Corporation Ab или Dell (www.dell.com) или Hervé Leclerc (HeL) или SingleClick Systems (www.singleclicksystems.com).
Описание: mysqld.exe не является необходимым для Windows. Mysqld.exe находится в подпапках «C:\Program Files» или иногда в подпапках «C:\Program Files\Common Files» или в подпапках «C:\Users\USERNAME» или в подпапках «Мои файлы» .
Известны следующие размеры файла для Windows 10/8/7/XP 13,179,660 байт (7% всех случаев), 8,158,720 байт и .
Название сервиса — MySQL.
Это не файл Windows. Нет информации о создателе файла. Приложение не видно пользователям.
Поэтому технический рейтинг надежности 55% опасности.Издатель программного обеспечения Mysql предоставляет сведения об обновлении (dev.mysql.com). Если возникают какие-либо проблемы с mysqld.exe, Вы также можете удалить всю программу MySQL Server или XAMPP используя Панель управления Windows.
Рекомендуем: Выявление проблем, связанных с mysqld.exe
Client connection[edit]
There are two ways to connect to a MySQL server, using Unix sockets and TCP/IP.
The default TCP/IP port is 3306:
# grep mysql /etc/services mysql 3306/tcp # MySQL mysql 3306/udp # MySQL mysql-cluster 1186/tcp # MySQL Cluster Manager mysql-cluster 1186/udp # MySQL Cluster Manager mysql-im 2273/tcp # MySQL Instance Manager mysql-im 2273/udp # MySQL Instance Manager
As a client, MySQL interprets ‘localhost’ as ‘use the Unix socket’. This means that MySQL won’t connect to 127.0.0.1:3306, but will use :
$ mysql -h localhost mysql> \s -------------- mysql Ver 14.12 Distrib 5.0.22, for redhat-linux-gnu (i386) using readline 5.0 Current user: sylvain@localhost Connection: Localhost via UNIX socket UNIX socket: /var/lib/mysql/mysql.sock
If you really need to connect to MySQL via TCP/IP to the local host without using Unix sockets, then specify ‘127.0.0.1’ instead of ‘localhost’:
$ mysql -h 127.0.0.1 mysql> \s -------------- mysql Ver 14.12 Distrib 5.0.22, for redhat-linux-gnu (i386) using readline 5.0 Current user: sylvain@localhost Connection: 127.0.0.1 via TCP/IP TCP port: 3306
In both cases, MySQL will understand your machine name as ‘localhost’ (this is used in the privileges system).
Многопоточная репликация
До недавнего времени Mysql реплика работала всего в один поток. Тогда, даже если мастер и слейв идентичны по характеристикам, слейв все равно может отставать от мастера.
В версии Mysql 5.6 внедрена поддержка параллельной репликации. Она позволяет слейву обрабатывать бинлог параллельно в несколько потоков. Такой режим включается настройкой в my.cnf на слейве:
... slave-parallel-workers = 2 ...
Число задает количество потоков и может принимать значения от 2 до 1024. Значение отключит многопоточную обработку бинлога.
При включении этой настройки Mysql будет распределять обработку бинлога разных баз данных между разными потоками. Это даст возможность Mysql не ждать завершения операций в разных базах, а выполнять их параллельно. На мастере для этого ничего настраивать не нужно.
Понятно, что если у вас всего одна база данных, вы не получите прирост в производительности. Зато в версии Mysql 5.7 для можно изменить тип распределения операций с помощью настройки в my.cnf:
В таком случае, уже все операции (точнее закомиченные транзакции) из бинлога будут обрабатываться параллельно.
mysqladmin Commands
mysqladmin command ] ...
Command is one or more of the following. Commands may be shortened to a unique prefix.
Command | Description | Added |
---|---|---|
Create a new database. | ||
Instruct server to write debug information to log. | ||
Delete a database and all its tables. | ||
Return all status variables and their values. | ||
Flush all statistics tables | ||
Flush status and statistics. | ||
Flush binary log. | MariaDB 10.0.30,MariaDB 10.1.25,MariaDB 10.2.5 | |
Flush client statistics. | ||
Flush engine log. | MariaDB 10.0.30,MariaDB 10.1.25,MariaDB 10.2.5 | |
Flush error log. | MariaDB 10.0.30,MariaDB 10.1.25,MariaDB 10.2.5 | |
Flush general query log. | MariaDB 10.0.30,MariaDB 10.1.25,MariaDB 10.2.5 | |
Flush all cached hosts. | ||
Flush index statistics. | ||
Flush all logs. | ||
Reload grant tables (same as reload). | ||
Flush relay log. | MariaDB 10.0.30,MariaDB 10.1.25,MariaDB 10.2.5 | |
Flush slow query log. | ||
Clear status variables. | ||
Clear table statistics. | ||
Flush all tables. | ||
Flush the thread cache. | ||
Flush user resources. | MariaDB 10.0.30,MariaDB 10.1.25,MariaDB 10.2.5 | |
Flush user statistics. | ||
Kill mysql threads. | ||
Change old password to new-password. The new password can be passed on the commandline as the next argument (for example, , or, from MariaDB 10.0, can be omitted (as long as no other command follows), in which case the user will be prompted for a password. If the password contains special characters, it needs to be enclosed in quotation marks. In Windows, the quotes can only be double quotes, as single quotes are assumed to be part of the password. If the server was started with the option, changing the password in this way will have no effect. | ||
Change old password to new-password using the old pre-MySQL 4.1 format. | ||
Check if mysqld is alive. Return status is 0 if the server is running (even in the case of an error such as access denied), 1 if it is not. | ||
Show list of active threads in server, equivalent to SHOW PROCESSLIST. With , equivalent to SHOW FULL PROCESSLIST. | ||
Reload grant tables. | ||
Flush all tables and close and open log files. | ||
Take server down by executing the SHUTDOWN command on the server. If connected to a local server using a Unix socket file, mysqladmin waits until the server’s process ID file has been removed to ensure that the server has stopped properly. See also the option. | ||
Gives a short status message from the server. | ||
Start all slaves. | MariaDB 10.0.0 | |
Start replication on a slave server. | ||
Stop all slaves. | MariaDB 10.0.0 | |
Stop replication on a slave server. | ||
Prints variables available. | ||
Returns version as well as status info from the server. |
Создание пользователя mysql
1. Как создать пользователя MySQL
Предположим, что база данных уже создана и называется test_database. Нам нужно открыть клиент базы данных. Для этого наберите в терминале:
Теперь можно работать. Для создания пользователя используется команда CREATE USER, её синтаксис такой:
CREATE USER ‘имя_пользователя’@’хост’ IDENTIFIED BY ‘пароль’;
Кроме имени пользователя, здесь нужно задать хост, с которого может авторизоваться этот пользователь. Здесь может быть доменное имя, IP-адрес, адрес подсети или знак «%», который означает все возможные хосты. Это очень удобно, потому что вы можете создать пользователя, к которому можно будет подключится только локально или настроить отдельно права для локального или удалённого пользователя.
Например, давайте создадим локального пользователя test_user с паролем password:
Или можно создать пользователя, который будет доступен со всех хостов:
Смотрим наших пользователей:
Все пользователи созданы.
2. Права пользователя MySQL
Создать пользователя — это ещё далеко не всё, теперь нужно назначить ему права. Для этого используется команда GRAT. У неё такой синтаксис:
GRANT привилегии ON база_данных . таблица TO ‘имя_пользователя’@’хост’;
Здесь можем дать определённые привилегии для опредёленного пользователя к базе данных или таблице. Если нужно дать права для всех баз данных или таблиц, используйте вместо названия звездочку — «*». Вот основные права пользователя MySQL, которые вы можете использовать:
- ALL PRIVILEGES — все, кроме GRANT;
- USAGE PRIVILEGES — никаких привилегий;
- SELECT — делать выборки из таблиц;
- INSERT — вставлять данные в таблицу;
- UPDATE — обновлять данные в таблице;
- DELETE — удалять данные из таблицы;
- FILE — разрешает читать файлы на сервере;
- CREATE — создавать таблицы или базы данных;
- ALTER — изменять структуру таблиц;
- INDEX — создавать индексы для таблиц;
- DROP — удалять таблицы;
- EVENT — обработка событий;
- TRIGGER — создание триггеров.
Также доступны такие привилегии администрирования баз данных:
- GRANT — изменять права пользователей;
- SUPER — суперпользователь;
- PROCESS — получение информации о состоянии MySQL;
- RELOAD — позволяет перезагружать таблицы привилегий;
- SHUTDOWN — позволяет отключать или перезапускать базу данных;
- SHOW DATABASES — просмотр списка баз данных;
- LOCK TABLES — блокирование таблиц при использовании SELECT;
- REFERENCES — создание внешних ключей для связывания таблиц;
- CREATE USER — создание пользователей;
Чтобы дать права пользователю MySQL на обновление и добавление записей для базы данных test_database, выполните:
Дальше дадим этому же пользователю все права над этой базой данных:
Теперь посмотрим привилегии нашего пользователя:
Мы видим, что для всех баз данных и таблиц привелегий нет, но зато есть все привилегии для базы данных test_database. Вот так это работает. После обновления прав пользователя необходимо обновить таблицу прав пользователей MySQL в памяти. Для этого выполните:
3. Удаление прав пользователя MySQL
Чтобы отозвать права у пользователя MySQL, используйте команду REVOKE вместо GRANT. Её синтаксис похож на GRANT:
REVOKE привилегии ON база_данных . таблица FROM ‘имя_пользователя’@’хост’;
Например, заберём все права на базу данных test_database у нашего пользователя:
4. Создание суперпользователя MySQL
Если вам необходимо создать пользователя со всеми правами MySQL на замену для root, то можно использовать такую конструкцию:
Даём все привилегии для пользователя test_user над всеми базами данными и всеми таблицами. Но наш пользователь не сможет давать права другим пользователям. Чтобы это исправить, нужно дать ему привилегию GRANT, а для этого используется такая команда:
Теперь этот пользователь является суперпользователем для MySQL и, авторизовавшись от его имени в PhpMyAdmin, вы можете делать всё то же самое, что и с помощью root.
Installation[edit]
Debian packagesedit
The package name is usually mysql-server, either directly or as a transitional package for the latest version.
Stableedit
There are two Debian packages in the current stable release:
You can install it using this command:
apt-get install mysql-server
or by installing the package you want using the Synaptic GUI.
Backportsedit
Backports.org may also offer more recent versions.
To install it, you need to add the backports source in your :
and then use aptitude:
apt-get install -t lenny-backports mysql-server-5.1
Uninstalledit
To simply remove the program:
apt-get remove mysql-server
To remove the configuration files as well, resulting in a clean environment:
apt-get remove --purge mysql-server
Debconf will ask you if you want to remove the existing databases as well. Answer wisely!
Fedora Core 5edit
You can install it using this command:
yum install mysql-server
which will take care of installing the needed dependencies.
Using pirut (Applications->Add/Remove Software), you can also server MySQL Database in the Servers category:
Gentooedit
MySQL is available in the main Portage tree as «dev-db/mysql». You must use the fully qualified ebuild name as «mysql» is made ambiguous by «virtual/mysql»
Command:
emerge dev-db/mysql
You can install it using this command:
cd /usr/ports/databases/mysql50-server/ && make install clean
This command will install the MySQL 5.0 server as well as all necessary dependencies (which includes the MySQL client).
t
Privileges[edit]
The MySQL privileges system.
Introductionedit
MySQL requires you to identify yourself when you connect to the database. You provide the following credentials:
- an identity, composed of:
- a username
- a machine name or IP address (detected automatically by the server)
- a password, to prove your identity
Usually, MySQL-aware applications also ask you for a database name, but that’s not part of the credentials, because this does not relate to who you are.
MySQL then associates privileges to these credentials; for example, the right to query a given database, add data to another one, create additional databases or remove existing ones, etc.
Who am I?edit
Once connected, it is not necessarily obvious who MySQL thinks you are. CURRENT_USER() provides this information:
mysql> SELECT CURRENT_USER(); +----------------+ | CURRENT_USER() | +----------------+ | root@localhost | +----------------+ 1 row in set (0.00 sec)
SHOW GRANTSedit
Prototype:
SHOW GRANTS FOR user SHOW GRANTS --current user
SHOW GRANTS allow you to check the current privileges for a given user.
For example, here are the default privileges for user root:
mysql> SHOW GRANTS FOR 'root'@'localhost'; +---------------------------------------------------------------------+ | Grants for root@localhost | +---------------------------------------------------------------------+ | GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION | +---------------------------------------------------------------------+ 1 row in set (0.00 sec)
You also use use to check the privileges for the current user.
GRANTedit
The GRANT command allows you to give (GRANT) privileges to a given user.
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, REFERENCES, database.* TO 'user'@'localhost';
DROP USERedit
DROP USER 'mediawiki'; DROP USER 'mediawiki'@'host';
Starting with v5.0.2, this removes the associated privileges as well.
With earlier versions, you also need to REVOKE its PRIVILEGES manually.
SET PASSWORDedit
Prototype:
SET PASSWORD = PASSWORD('your_password')
If user is not specified, the current user is used (this is useful when you connect to mysql using the command line).
Example with an explicit user:
SET PASSWORD FOR 'mediawiki'@'localhost' = PASSWORD('ifda8GQg');
There is a command-line synonym:
mysqladmin password 'your_password'
(with the usual connection options and )
However, using passwords on the command line presents a security risk. For example, if root changes his MySQL password:
root# mysqladmin password 'K2ekiEk3'
Then another user can spy on him by looking at the process list:
user$ ps aux | grep mysqladmin root 7768 0.0 0.1 7044 1516 pts/1 S+ 16:57 0:00 mysqladmin password K2ekiEk3
Conclusion: don’t user .
If you are looking for a way to generate passwords, either secure or easy to remember, try the program (there is a Debian package available):
$ pwgen ooGoo7ba ir4Raeje Ya2veigh zaXeero8 Dae8aiqu rai9ooYi phoTi6gu Yeingo9r tho9aeDa Ohjoh6ai Aem8chee aheich8A Aelaeph3 eu4Owudo koh6Iema oH6ufuya $ pwgen -s # secure zCRhn8LH EJtzzLRE G4Ezb5BX e7hQ88In TB8hE6nn f8IqdMVQ t7BBDWTH ZZMhZyhR gbsXdIes hCQMbPE6 XD8Owd0b xitloisw XCWKX9B3 MEATkWHH vW2Y7HnA 3V5ubf6B
Very handy if you manage a lot of accounts 🙂
MySQL 4.1 password issuesedit
As of version 4.1, MySQL introduced a password-related change.
You’ll experience this via errors such as: Client does not support authentication protocol requested by server; consider upgrading MySQL client.
If you wish to support older client programs, you need to define the MySQL account password this way:
SET PASSWORD = OLD_PASSWORD('your_pass');
There is apparently no way to use old passwords with the syntax.
Alternatively, you can use the configuration option in your server’s . This means that new passwords will be encoded using the old-style, shorter, less secure format. For example, in Debian Sarge and FC5, the MySQL default configuration enforces old-style password for backward compatibility with older clients:
... old_passwords=1
- For example, you can get this error on Debian Sarge’s apache+libapache_mod_php4+php4-mysql, the latter depends on libmysqlclient12 aka MySQL 4.0 ( gives ). If you rely and libmysqlclient14 or later, then your application supports both the old and the new password formats.
1: Настройка MySQL для поддержки удаленных соединений
Переместив обработку БД на отдельный сервер, вы увеличите производительность сайта. Кроме того, так вы получите базовую структуру для настройки балансировки нагрузки. Установив MySQL по мануалу, который мы предложили в Требованиях, вы должны немного изменить конфигурацию, чтобы включить поддержку удаленных соединений.
Большинство параметров сервера MySQL можно изменить в файле mysqld.cnf, который по умолчанию хранится в каталоге /etc/mysql/mysql.conf.d/. Откройте этот файл на сервере 2 с правами root в редакторе. Здесь мы будем использовать nano:
Этот файл состоит из разделов, заголовки которых берутся в квадратные скобки. Найдите раздел mysqld:
В нем найдите параметр bind-address, который определяет, какие сетевые адреса нужно прослушивать.
На данный момент MySQL привязан к 127.0.0.1, то есть прослушивает только локальные соединения. Это нужно изменить, указав внешний IP-адрес, по которому можно получить доступ к серверу.
Если оба сервера находятся в центре обработки данных с поддержкой частной сети, используйте внутренний IP-адрес сервера 2. В противном случае вы можете использовать внешний IP-адрес:
Чтобы подключаться к базе данных через Интернет, нужно зашифровать подключения и так обеспечить безопасность данных. Если вы не зашифруете соединение с MySQL, любой пользователь в сети сможет перехватить конфиденциальные данные между веб-сервером и сервером базы данных. Добавьте следующую строку после bind-address:
Сохраните и закройте файл.
Для обеспечения SSL-соединений нужно создать ключ и сертификат. MySQL предлагает команду, которая автоматически установит все необходимое. Запустите следующую команду, которая создаст необходимые файлы. Также сделает их доступными для чтения сервером MySQL, указав UID пользователя mysql:
Чтобы обновить конфигурацию MySQL, перезапустите базу данных:
Чтобы убедиться, что сервер прослушивает удаленные соединения, используйте netstat:
Эта команда выведет сетевую статистику сервера. Как видите, процесс mysqld привязан к адресу db_server_ip по стандартному порту MySQL 3306.
Откройте этот порт в брандмауэре:
Почему не запускается MySQL сервер?
Если вы используете systemd для запуска сервисов, то получите такую ошибку:
failed to start mysql server или job for mysql failed because the control proccess exited
Из сообщения понято только то что что-то пошло не так, но что именно неизвестно. Чаще всего проблемы в работе MySQL могут вызвать такие причины:
- Синтаксические ошибки в конфигурационном файле;
- Неверные настройки;
- Недостаточное количество оперативной памяти на сервере;
- Проблемы с правами доступа;
- Сетевой порт уже занят;
- Таблицы баз данных повреждены;
Дальше мы рассмотрим основные пути решения этих проблем. Но сначала нам нужно выяснить почему не запускается программа. Гадать на кофейной гуще и перебирать все возможные методы решения можно очень долго, самым эффективным решением будет посмотреть какие ошибки выдает сама программа.