Table of Contents

Сервис MySQL

Установка

Debian/Ubuntu

debian# apt install default-mysql-server

ubuntu20# apt install mysql-server

FreeBSD

freebsd11# pkg install mysql56-server

[server:~] # sysrc mysql_enable=yes

[server:~] # service mysql-server start

Windows

http://dev.mysql.com/downloads/installer/

или

http://www.apachefriends.org/en/xampp.html

shell> cd C:\xampp\mysql\bin\

Настройка кодировки UTF-8

# cat /etc/mysql/conf.d/utf8.cnf
[mysqld]
collation_server=utf8_general_ci
character_set_server=utf8
init_connect='SET collation_connection = utf8_general_ci'
init_connect='SET NAMES utf8'
skip-character-set-client-handshake

Управление параметрами сервера

# cat /etc/mysql/conf.d/my-custom-settings.cnf
[mysqld]
sql_mode=""
innodb_strict_mode=OFF
# service mysql restart

Смена пароля пользователя root

MariaDB

MariaDB [(none)]> ALTER USER root@localhost IDENTIFIED VIA mysql_native_password;

MariaDB [(none)]> SET PASSWORD = PASSWORD('12345678');

# service mysql restart

MySQL, начиная c версии 5.7

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '12345678';

MySQL, до версии 5.7

# mysqladmin --user=root password somepassword

# mysqladmin --user=root --password reload

Подключение

В интерактивном режиме

# mysql -u root -p

Welcome to the MySQL monitor.  Commands end with ; or \g.
...
mysql> exit

Из командной строки

# mysql billing -u billing --password=XXX -B --skip-column-names -e "select login, pass from accounts where uid=YYY" | tr '\t' ';'

Управление базами данных и пользователями

Просмотр списка баз данных и подключение к базе данных

mysql> show databases;

mysql> use mysql;

Создание базы данных

shell> mysql -u root -p

mysql> CREATE DATABASE cacti;

mysql> exit;

или

shell> mysqladmin -u root -p create cacti

Импорт данных

windows> mysql -u root -p cacti < C:\xampp\htdocs\cacti\cacti.sql

или

freebsd# mysql cacti < /usr/local/share/cacti/cacti.sql

или

ubuntu# zcat /usr/share/doc/cacti/cacti.sql.gz | mysql -p cacti

Создание пользователя и делегирование прав

mysql> GRANT ALL PRIVILEGES ON cacti.* TO "cactiuser"@"localhost" IDENTIFIED BY "cactiuser";

mysql> GRANT SELECT (uuid,login,name) ON billing.accounts to user1@localhost;

mysql> FLUSH PRIVILEGES;

mysql> exit;

shell> mysql -u cactiuser -p cacti
Enter password: cactiuser

Отладка

Протоколирование всех запросов

# cat /etc/mysql/mariadb.conf.d/50-server.cnf
...
[mysqld]
...
general-log
general-log-file=/var/log/mysql/q.log
log-output=file
...

adminer

# apt install adminer

# cat /etc/apache2/sites-available/000-default.conf
...
        Alias /adminer /usr/share/adminer/adminer/
...

phpmyadmin

# apt install phpmyadmin

# ls -l /etc/apache2/conf-available/phpmyadmin.conf

# less /etc/phpmyadmin/apache.conf
http://server.corpX.un/phpmyadmin

Управление сбоями

1. Настраиваем mysql на работу в режиме чтения

# nano /etc/my.cnf
...
innodb_force_recovery=4
...

2. Запускаем из командной строки

/usr/libexec/mysqld --skip-grant &

3. Бекапим все базы данных

mysqldump --all-databases --add-drop-table > dumpfile.sql

4. Останавливаем сервер

killall mysqld

5. Убираем настройку работы в режиме чтения

nano /etc/my.cnf
...
#innodb_force_recovery=4
...

6. Удаляем/перемещаем каталог со старыми базами данных

mv /var/lib/mysql /var/lib/mysql_

7. Создаем новый каталог для баз данных с нужными правами

mkdir /var/lib/mysql/
chown mysql:mysql /var/lib/mysql/

8. Создаем системные базы данных в новом каталоге

/usr/libexec/mysqld --initialize --user=mysql

9. Запускаем сервис

/etc/init.d/mysqld start
10. Восстанавливаем остальные базы данных из бекапа

mysql < dumpfile.sql