Сервер MySQL
Описание программного обеспечения
MySQL — это система управления реляционными базами данных (RDBMS), разработанная шведской компанией MySQL AB, которая была приобретена корпорацией Sun Microsystems (теперь Oracle). Это одна из самых популярных систем управления реляционными базами данных (RDBMS) в отрасли, особенно для веб-приложений.
Данные в реляционной базе данных хранятся в разных таблицах, а не в большом хранилище данных, что повышает эффективность и гибкость.
Язык структурированных запросов (SQL), используемый MySQL, является наиболее распространенным стандартным языком для доступа к базам данных. MySQL использует дистрибутив с двойным лицензированием и доступен в двух версиях: версия для сообщества и коммерческая версия. MySQL оптимален для небольших или средних веб-сайтов ввиду своего небольшого размера, высокой скорости, низкой стоимости и, особенно, открытого исходного кода.
Настройка среды
|
Следующая конфигурация среды представлена исключительно для справки. Настройте среду в соответствии со своими требованиями. |
Отключение брандмауэра и автоматического запуска
|
Рекомендуется отключить брандмауэр в тестовой среде, чтобы исключить нарушение работы сети. Настройте брандмауэр в соответствии с фактическими требованиями. |
-
Остановите службу брандмауэра от имени пользователя
root:systemctl stop firewalld -
Отключите службу брандмауэра от имени пользователя
root:systemctl disable firewalldАвтоматический запуск будет автоматически отключен, поскольку отключен брандмауэр.
Отключение SELinux
Измените файл конфигурации от имени пользователя root.
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
Создание группы пользователей и пользователя
|
В серверной среде в целях безопасности каждому процессу назначаются отдельные пользователи для реализации изоляции разрешений. Группа пользователей и пользователь создаются для ОС, а не для базы данных. |
-
Создайте пользователя или группу пользователей MySQL от имени пользователя
root.groupadd mysqluseradd -g mysql mysql -
Задайте пароль для пользователя от имени пользователя
root:passwd mysqlВведите пароль дважды для подтверждения.
Создание дисков данных
Если необходимо выполнить тест производительности, для каталога данных требуется отдельный диск. Необходимо отформатировать диск и подключить его. Подробнее см. в разделе "Способ 1" или "Способ 2".
В тесте, отличном от теста производительности, выполните команду от имени пользователя root, чтобы создать каталог данных.
Затем пропустите этот раздел:
mkdir /data
Способ 1. Использование fdisk для управления дисками от имени пользователя root
-
Создайте раздел, например
/dev/sdb.fdisk /dev/sdb -
Введите
nи нажмите клавишу Enter. -
Введите
pи нажмите клавишу Enter. -
Введите
1и нажмите клавишу Enter. -
Сохраните настройки по умолчанию и нажмите клавишу Enter.
-
Сохраните настройки по умолчанию и нажмите клавишу Enter.
-
Введите
wи нажмите клавишу Enter. -
Создайте файловую систему, например
xfs.mkfs.xfs /dev/sdb1 -
Подключите раздел к
/dataдля ОС.mkdir /datamount /dev/sdb1 /data
-
Отредактируйте файл
/etc/fstab, чтобы разрешить автоматическое подключение диска данных после перезапуска системы. Например, добавьте содержимое в последнюю строку:# # /etc/fstab # Created by anaconda on Tue Nov 5 16:17:11 2019 # # Accessible filesystems, by reference, are maintained under '/dev/disk' # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for for info # /dev/mapper/centos-root / xfs defaults 0 0 UUID=fa02453a-0d4c-4a30-bf6c-c4d01cbd2c86 /boot xfs defaults 0 0 UUID=006C-8EE2 /boot/efi vfat umask=0077,shortname=winnt 0 0 /dev/mapper/centos-home /home xfs defaults 0 0 /dev/mapper/centos-swap swap swap defaults 0 0 /dev/nvme0n1p1 /data xfs defaults 1 2
Способ 2. Использование LVM для управления дисками от имени пользователя root
|
Установите пакет LVM2 в образ, как указано ниже:
|
-
Создайте физический том, например
sdb.pvcreate /dev/sdb -
Создайте группу физических томом, например
datavg.vgcreate datavg /dev/sdb -
Создайте локальный том, например
datalvобъёмом 600 ГБ.lvcreate -L 600G -n datalv datavg -
Создайте файловую систему.
mkfs.xfs /dev/datavg/datalv -
Создайте каталог данных и подключите его.
mkdir /datamount /dev/datavg/datalv /data -
Отредактируйте файл
/etc/fstab, чтобы разрешить автоматическое подключение диска данных после перезапуска системы. Например, добавьте содержимое в последнюю строку:/dev/datavg/datalv /data xfs defaults 1 2
Создание каталога базы данных и предоставление разрешений
-
В созданном каталоге данных
/dataсоздайте каталоги для процессов и предоставьте разрешения группе MySQL или пользователю, созданным от имени пользователяroot.mkdir -p /data/mysql cd /data/mysql mkdir data tmp run log chown -R mysql:mysql /data
Установка, запуск и удаление MySQL
Установка MySQL
-
Настройте локальный источник YUM. Подробнее см. в разделе Настройка сервера репозитория.
-
Очистите кеш.
dnf clean all -
Создайте кеш.
dnf makecache -
Установите сервер MySQL от имени пользователя
root.dnf install mysql-server -
Проверьте установленный пакет RPM.
rpm -qa | grep mysql-server
Запуск MySQL
-
Измените файл конфигурации.
-
Создайте файл
my.cnfот имени пользователяrootи измените пути к файлам (включая путь установки программного обеспеченияbasedirи путь к даннымdatadir) в соответствии с фактическими требованиями.Отредактируйте файл
my.cnfследующим образом.[mysqld_safe] log-error=/data/mysql/log/mysql.log pid-file=/data/mysql/run/mysqld.pid [mysqldump] quick [mysql] no-auto-rehash [client] default-character-set=utf8 [mysqld] basedir=/usr/local/mysql socket=/data/mysql/run/mysql.sock tmpdir=/data/mysql/tmp datadir=/data/mysql/data default_authentication_plugin=mysql_native_password port=3306 user=mysql -
Убедитесь, что файл
my.cnfизменен правильно:cat /etc/my.cnfВ файле конфигурации параметр
baseirуказывает путь установки программного обеспечения. Измените его в соответствии с фактическими требованиями. -
Измените группу и пользователя файла
/etc/my.cnfнаmysql:mysqlот имени пользователяroot.chown mysql:mysql /etc/my.cnf
-
-
Настройте переменные среды.
-
Добавьте путь к двоичным файлам MySQL в параметр
PATHот имени пользователяroot.echo export PATH=$PATH:/usr/local/mysql/bin >> /etc/profileВ команде
/usr/local/mysql/bin— это абсолютный путь к файламbinв каталоге установки программного обеспечения MySQL. Измените его в соответствии с фактическими требованиями. -
Выполните следующую команду от имени пользователя
root, чтобы переменные среды вступили в силу:source /etc/profile
-
-
Инициализируйте базу данных от имени пользователя
root.Вторая строка снизу содержит исходный пароль, который будет использоваться при входе в базу данных. mysqld --defaults-file=/etc/my.cnf --initializeПример вывода:
2020-03-18T03:27:13.702385Z 0 [System] [MY-013169] [Server] /usr/local/mysql/bin/mysqld (mysqld 8.0.17) initializing of server in progress as process 34014 2020-03-18T03:27:24.112453Z 5 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: iNat=n#V2tZu 2020-03-18T03:27:28.576003Z 0 [System] [MY-013170] [Server] /usr/local/mysql/bin/mysqld (mysqld 8.0.17) initializing of server has completedЕсли выходные данные команды содержат фразу "initializing of server has completed", база данных была инициализирована. В выходных данных команды
iNat=n#V2tZuявляется исходным паролем. -
Запустите базу данных.
Запустите MySQL от имени пользователя
mysql, если вы запускаете службу базы данных впервые. Если вы запустите MySQL от имени пользователяroot, появится сообщение о том, что файлmysql.logотсутствует. Если вы запустите MySQL от имени пользователяmysql, файлmysql.logбудет создан в каталоге/data/mysql/log. Если вы снова запустите базу данных от имени пользователяroot, сообщения об ошибке отображаться не будут.-
Измените разрешения на доступ к файлу от имени пользователя
root.chmod 777 /usr/local/mysql/support-files/mysql.server -
Запустите MySQL от имени пользователя
root.cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql chkconfig mysql on -
Запустите MySQL от имени пользователя
mysql.su - mysql service mysql start
-
-
Войдите в базу данных.
Введите исходный пароль, сгенерированный во время инициализации базы данных.
Если MySQL установлен с помощью пакета RPM, полученного с официального сайта, файл
mysqldнаходится в каталоге/usr/sbin. Убедитесь, что в команде указан правильный каталог./usr/local/mysql/bin/mysql -uroot -p -S /data/mysql/run/mysql.sock
При успешном входе в терминал выводится сообщение следующего вида:
Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 8 Server version: 8.0.17 Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. -
Настройте учетные записи и пароли базы данных.
-
После входа в базу данных измените пароль пользователя
rootдля входа в базу данных.ALTER USER 'root'@'localhost' IDENTIFIED BY "123456"; -
Создайте пользователя
rootдля всех остальных хостов в домене.CREATE USER 'root'@'%' IDENTIFIED BY '123456'; -
Предоставьте разрешения пользователю
root.GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'; FLUSH PRIVILEGES;
-
-
Выйдите из базы данных.
Выполните команду
\qилиexit, чтобы выйти из базы данных.mysql>exit
Управление пользователями базы данных
Создание пользователей
Выполните инструкцию CREATE USER, чтобы создать одного или нескольких пользователей и задать соответствующие пароли.
CREATE USER 'username'@'hostname' IDENTIFIED BY 'password';
В представленных выше данных:
-
username— имя пользователя. -
host— имя хоста, то есть имя хоста, на котором пользователь подключается к базе данных. Как локальный пользователь вы можете задать для параметра значениеlocalhost. Если имя хоста не было указано при создании пользователя, по умолчанию используется имя%, что указывает на группу хостов. -
password— пароль для входа на сервер. Пароль может быть пустым. Если пароль не задан, пользователь может войти на сервер без ввода пароля. Однако это не рекомендуется, поскольку безопасность может оказаться под угрозой.
Чтобы использовать инструкцию CREATE USER, требуется разрешение INSERT для базы данных или глобальное разрешение CREATE USER.
После создания учётной записи пользователя с помощью инструкции CREATE USER в таблицу пользователей в базе данных добавляется соответствующая запись.
Если создаваемая учетная запись существует, то во время выполнения инструкции произойдет ошибка.
У нового пользователя мало разрешений, и он может выполнять только операции, не требующие разрешений.
Например, пользователь может запустить инструкцию SHOW, чтобы запросить список всех подсистем хранилища и наборов символов.
Пример
-
Создание локального пользователя с паролем
123456и именем пользователяuserexample1.CREATE USER 'userexample1'@'localhost' IDENTIFIED BY '123456'; -
Создание пользователя с паролем
123456, именем пользователяuserexample2и именем хоста192.168.1.100.CREATE USER 'userexample2'@'192.168.1.100' IDENTIFIED BY '123456';
Просмотр пользователей
Выполните инструкцию SHOW GRANTS или SELECT, чтобы просмотреть одного или нескольких пользователей.
-
Просмотр определенного пользователя:
SHOW GRANTS [FOR 'username'@'hostname'];SELECT USER,HOST,PASSWORD FROM mysql.user WHERE USER='username';
-
Просмотр всех пользователей:
SELECT USER,HOST FROM mysql.user;
В представленных выше данных:
-
username— имя пользователя; -
hostname— имя хоста.
Изменение пользователей
Изменение имени пользователя
Выполните инструкцию RENAME USER, чтобы переименовать одного или нескольких пользователей.
RENAME USER 'oldusername'@'hostname' TO 'newusername'@'hostname';
В представленных выше данных:
-
oldusername— исходное имя пользователя; -
newusername— новое имя пользователя; -
hostname— имя хоста.
Для переименования существующей учётной записи используется инструкция RENAME USER.
Если исходная учетная запись не существует в системе или существует новая учетная запись, при выполнении инструкции произойдет ошибка.
Чтобы использовать инструкцию RENAME USER, требуется разрешение UPDATE для базы данных или глобальное разрешение CREATE USER.
Пример изменения пользователя
Переименование пользователя userexample1 на userexample2 и переименование хоста на locahost.
RENAME USER 'userexample1'@'localhost' TO 'userexample2'@'localhost';
Изменение пароля пользователя
Используйте инструкцию SET PASSWORD, чтобы изменить пароль пользователя для входа в систему.
SET PASSWORD FOR 'username'@'hostname' = 'newpassword';
В представленных выше данных:
-
FOR 'username'@'hostname': имя пользователя и имя хоста для изменения пароля. Это необязательный параметр. -
newpassword— новый пароль.
Если в инструкцию SET PASSWORD не добавлено предложение FOR, пароль текущего пользователя будет изменен.
Предложение FOR должно быть указано в формате 'username'@'hostname', где username — это имя пользователя учётной записи, а hostname — имя хоста учётной записи.
Учётная запись, пароль которой необходимо изменить, должна существовать в системе. В противном случае при выполнении инструкции возникнет ошибка.
Удаление пользователей
Используйте инструкцию DROP USER, чтобы удалить одну или несколько учётных записей пользователей и соответствующие разрешения.
DROP USER 'username1'@'hostname1' [,'username2'@'hostname2']...;
|
Удаление пользователей не влияет на таблицы, индексы или другие созданные ими объекты базы данных, поскольку база данных не записывает учетные записи, создавшие эти объекты. |
Инструкцию DROP USER можно использовать для удаления одной или нескольких учётных записей базы данных и их исходных разрешений.
Чтобы использовать инструкцию DROP USER, требуется разрешение DELETE для базы данных или глобальное разрешение CREATE USER.
В инструкции DROP USER, если имя хоста учётной записи не указано, по умолчанию используется имя %.
Предоставление разрешений пользователю
Чтобы предоставить разрешения новому пользователю, выполните инструкцию GRANT.
GRANT privileges ON databasename.tablename TO 'username'@'hostname';
В представленных выше данных:
-
Предложение
ON: указывает объект и уровень, на котором предоставляется разрешение. -
privileges— указывает разрешения пользователя на выполнение операций, таких какSELECT, INSERT иUPDATE. Чтобы предоставить пользователю все разрешения, используйтеALL. -
databasename— имя базы данных. -
tablename— имя таблицы. -
Предложение
TO: задает пароль пользователя и указывает пользователя, которому предоставляется разрешение. -
username— имя пользователя. -
hostname— имя хоста.
Чтобы предоставить пользователю разрешение на выполнение операций со всеми базами данных и таблицами, используйте звездочки , например .*.
Если задать пароль для существующего пользователя в предложении TO, исходный пароль будет перезаписан новым паролем.
Если разрешение предоставлено пользователю, которого не существует, автоматически выполняется инструкция CREATE USER для создания пользователя, однако для пользователя должен быть задан пароль.
Удаление разрешений пользователя
Выполните инструкцию REVOKE, чтобы удалить разрешения пользователя. Пользователь при этом не будет удален.
REVOKE privilege ON databasename.tablename FROM 'username'@'hostname';
Параметры в инструкции REVOKE такие же, как и в инструкции GRANT.
Чтобы использовать инструкцию REVOKE, требуется глобальное разрешение CREATE USER или разрешение UPDATE для базы данных.
Управление базами данных
Создание базы данных
Выполните инструкцию CREATE DATABASE, чтобы создать базу данных.
CREATE DATABASE databasename;
В команде выше databasename можно заменить именем базы данных без учета регистра.
Просмотр базы данных
Выполните инструкцию SHOW DATABASES, чтобы просмотреть базу данных.
SHOW DATABASES;
Выбор базы данных
Как правило, перед созданием таблицы или отправкой запроса к ней необходимо выбрать целевую базу данных.
Используйте инструкцию USE для выбора базы данных.
USE databasename;
В предыдущей команде параметр databasename — это имя базы данных.
Удаление базы данных
Чтобы удалить базу данных, выполните инструкцию DROP DATABASE.
Будьте осторожны при удалении базы данных. После удаления базы данных все таблицы и данные в базе данных будут утеряны.
DROP DATABASE databasename;
В предыдущей команде параметр databasename — это имя базы данных.
Для удаления существующей базы данных используется команда DROP DATABASE.
После выполнения этой команды все таблицы в базе данных удаляются, однако это не означает автоматическое удаление прав доступа пользователя к базе данных.
Чтобы использовать инструкцию DROP DATABASE, требуется разрешение DROP для базы данных.
DROP SCHEMA является синонимом DROP DATABASE.
Резервное копирование базы данных
Чтобы создать резервную копию базы данных, выполните команду mysqldump от имени пользователя root.
-
Резервное копирование одной или нескольких таблиц:
mysqldump [options] databasename [tablename ...] > outfile -
Резервное копирование одной или нескольких баз данных:
mysqldump [options] -databases databasename ... > outfile -
Резервное копирование всех баз данных:
mysqldump [options] -all-databases > outputfile
В представленных выше данных:
-
databasename— имя базы данных. -
tablename— имя таблицы данных. -
outfile— файл резервной копии базы данных. -
options— параметр командыmysqldump. Можно ввести несколько параметров через пробел. Общие параметры командыmysqldump:-
-u,--user:имя пользователя. -
-p,--password: пароль. -
-P,--port: номер порта. -
-h,--host: имя хоста. -
-r,--result-file: сохраняет результат экспорта в указанный файл, что эквивалентно>. -
-t: резервное копирование только данных. -
-d: резервное копирование только структуры таблицы.
-
Пример
-
Резервное копирование всех баз данных пользователя
rootна порту3306хоста с IP-адресом192.168.202.144в файлalldb.sql.mysqldump -h 192.168.202.144 -P 3306 -uroot -p123456 --all-databases > alldb.sql -
Резервное копирование базы данных db1 пользователя
rootна порту3306хоста с IP-адресом192.168.202.144в файлdb1.sql.mysqldump -h 192.168.202.144 -P 3306 -uroot -p123456 --databases db1 > db1.sql -
Резервное копирование таблицы
tb1базы данныхdb1пользователяrootна порту3306хоста с IP-адресом192.168.202.144в файлdb1tb1.sql.mysqldump -h 192.168.202.144 -P 3306 -uroot -p123456 db1 tb1 > db1tb1.sql -
Резервное копирование только структуры таблицы базы данных db1 пользователя
rootна порту3306хоста с IP-адресом192.168.202.144в файлdb1.sql.mysqldump -h 192.168.202.144 -P 3306 -uroot -p123456 -d db1 > db1.sql -
Резервное копирование только структуры таблицы базы данных db1 пользователя
rootна порту3306хоста с IP-адресом192.168.202.144в файлdb1.sql.mysqldump -h 192.168.202.144 -P 3306 -uroot -p123456 -t db1 > db1.sql
Восстановление базы данных
Чтобы восстановить базу данных, выполните команду mysql от имени пользователя root.
Восстановление одной или нескольких таблиц:
mysql -h hostname -P portnumber -u username -ppassword databasename < infile
В представленных выше данных:
-
hostname— имя хоста. -
portnumber— номер порта. -
username— имя пользователя. -
password— пароль. -
databasename— имя базы данных. -
infile— параметрoutfileв командеmysqldump.