12 KiB
MySQL 5.7 на Debian 12
Описан процесс установки MySQL 5.7 и настройка репликации с помощью Percona xtrabackup мастер -> слейв
- MySQL 5.7 на Debian 12
- Установка MySQL 5.7 на Debian 12
- xtrabackup на mysql 5.7
- Создание тестовой БД и наполнение данными
- Репликация - общие настройки
- Настройка репликации xtrabackup
- Подготовка резервной копии перед восстановлением
- Копирование резервной копии на слейв
- Восстановление БД на слейве
- Настройка репликации
- Проверка репликации
Установка MySQL 5.7 на Debian 12
https://downloads.mysql.com/archives/community/
Выбираем версию 5.7.42 для Debian
wget https://downloads.mysql.com/archives/get/p/23/file/mysql-server_5.7.42-1debian10_amd64.deb-bundle.tar
tar -xvf mysql-server_5.7.42-1debian10_amd64.deb-bundle.tar
apt install ./mysql-community-client_5.7.42-1debian10_amd64.deb
apt install ./mysql-client_5.7.42-1debian10_amd64.deb
apt install ./mysql-community-server_5.7.42-1debian10_amd64.deb
xtrabackup на mysql 5.7
Установка Percona xtrabackup
https://docs.percona.com/percona-xtrabackup/8.4/apt-repo.html
apt update && apt install curl
curl -O https://repo.percona.com/apt/percona-release_latest.generic_all.deb
apt install gnupg2 lsb-release ./percona-release_latest.generic_all.deb
apt update
percona-release enable pxb-24
apt update
apt install percona-xtrabackup-24
xtrabackup --version
Создание тестовой БД и наполнение данными
Подключение к СУБД
mysql -u root -p
Создание базы данных
CREATE DATABASE IF NOT EXISTS sape_test_db;
По ошибке была создана БД с именем - sape_test_db.db
При её удалении полачал ошибку
mysql> drop database 'sape_test_db.db';
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''sape_test_db.db'' at line 1
Поиск причин привёл - https://stackoverflow.com/questions/16135987/error-on-drop-default-database-error
при использовании в названии зарезервированных слов, следует заключать имя БД в косые ковычки `
mysql> drop database `sape_test_db.db`;
Query OK, 0 rows affected (0,17 sec)
Переключение на созданную базу данных
USE sape_test_db;
Создание таблицы в базе данных
таблица будет содержать три столбца: id, name, surname, address. Первичным ключом будет id. В качестве движка явно укажем InnoDB.
CREATE TABLE admin_table
( id int NOT NULL AUTO_INCREMENT,
name char(20) NOT NULL,
surname char(20) NOT NULL,
city char(20) NULL,
PRIMARY KEY (id) )
ENGINE=InnoDB;
для удаления таблицы
DROP TABLE admin_table;
Добавление записей в таблицу
INSERT admin_table(name, surname, city) VALUES ('Andrei', 'Ahmadulin', 'Ekaterinburg');
INSERT admin_table(name, surname, city) VALUES ('Ilya', 'Paramonov', 'Moscow');
INSERT admin_table(name, surname, city) VALUES ('Andrei', 'Zharkov', 'Moscow');
INSERT admin_table(name, surname, city) VALUES ('Artem', 'Dolgiy', 'Zelenograd');
Выборка из таблицы
SELECT * FROM admin_table;
Репликация - общие настройки
Эти настройки выполняются вне зависимости от выбранного способа репликации
Пользователь для выполнения задач репликации
Будет создан пользователь repl_user
с паролем repl_passwd
mysql -u root -p
CREATE USER 'repl_user'@'%' IDENTIFIED BY 'repl_passwd';
Если возникнет ошибка - ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
- https://stackoverflow.com/questions/43094726/your-password-does-not-satisfy-the-current-policy-requirements
кратко - достаточно изменить политику паролей
mysql> SHOW VARIABLES LIKE 'validate_password%';
+-------------------------------------------------+--------+
| Variable_name | Value |
+-------------------------------------------------+--------+
| validate_password.changed_characters_percentage | 0 |
| validate_password.check_user_name | ON |
| validate_password.dictionary_file | |
| validate_password.length | 8 |
| validate_password.mixed_case_count | 1 |
| validate_password.number_count | 1 |
| validate_password.policy | MEDIUM |
| validate_password.special_char_count | 1 |
+-------------------------------------------------+--------+
8 rows in set (0,03 sec)
mysql> SET GLOBAL validate_password.policy = LOW;
Query OK, 0 rows affected (0,00 sec)
mysql>
Теперь пользователя можно будет создать с простым паролем - 'repl_passwd'
Назначение привилегий для пользователя
GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
Настройка мастера для репликации
В файл /etc/mysql/conf.d/mysqld.cnf
, в секции [mysqld]
необходимо добавить следующие параметры:
[mysqld]
server_id = 1
log_bin = mysql-bin
После изменения конфигурации необходимо перезагрузить СУБД
systemctl restart mysql.service
Убедиться в том, что нужные параметры применились можно запросом в БД
mysql> SHOW VARIABLES LIKE 'server_id';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id | 1 |
+---------------+-------+
1 row in set (0,00 sec)
mysql> SHOW VARIABLES LIKE 'log_bin';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_bin | ON |
+---------------+-------+
1 row in set (0,00 sec)
Настройка репликации xtrabackup
https://docs.percona.com/percona-xtrabackup/2.4/howtos/setting_up_replication.html
Создание резервной копии
xtrabackup --backup --user=root --password --target-dir=/tmp/dump
Подготовка резервной копии перед восстановлением
xtrabackup --prepare --target-dir=/tmp/dump
Копирование резервной копии на слейв
rsync -avpP -e ssh /tmp/dump slave:/tmp
Восстановление БД на слейве
Остановить сервер БД и переместить имеющиеся данные на слейве
systemctl stop mysql
mkdir /root/mysql_old && mv /var/lib/mysql/* /root/mysql_old
Позднее, если не будет ошибок, перемещённые данные можно будет удалить
rm -rf /root/mysql_old
копирование дампа в целевой каталог слейва
xtrabackup --move-back --target-dir=/tmp/dump --datadir=/var/lib/mysql
установить корректные права
chown -R mysql:mysql /var/lib/mysql
Настройка репликации
Изменить конфигурацию слейва /etc/mysql/conf.d/mysqld.cnf
, в секции [mysqld]
[mysqld]
server_id = 2
Запустить сервер БД
systemctl start mysql
Убедиться в том, что нужные параметры применились можно запросом в БД
mysql> SHOW VARIABLES LIKE 'server_id';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id | 1 |
+---------------+-------+
1 row in set (0,00 sec)
Старт репликации
В скопированном дампе БД с мастера - /tmp/dump
уточнить название бинарного лога и позицию
root@slave:~# cat /tmp/dump/xtrabackup_binlog_info
mysql-bin.000001 154
Команда для запуска репликации в консоли mysql
mysql -u root -p
CHANGE MASTER TO
MASTER_HOST='master',
MASTER_USER='repl_user',
MASTER_PASSWORD='repl_passwd',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=154;
START SLAVE;
SHOW SLAVE STATUS \G
Стоит обратить внимание не значения
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Проверка репликации
На мастере добавить данные и убедиться, что они появились на слейве
mysql -u root -p
use sape_test_db;
INSERT admin_table(name, surname, city) VALUES ('Nikita', 'Samoilov', 'Sankt-Petersburg');
mysql> select * from admin_table;
+----+--------+-----------+------------------+
| id | name | surname | city |
+----+--------+-----------+------------------+
| 1 | Andrei | Ahmadulin | Ekaterinburg |
| 2 | Kit | Root | Georgia |
| 3 | Ilya | Paramonov | Moscow |
| 4 | Andrei | Zharkov | Moscow |
| 5 | Artem | Dolgiy | Zelenograd |
| 6 | Nikita | Samoilov | Sankt-Petersburg |
+----+--------+-----------+------------------+
6 rows in set (0,00 sec)
Проверить данные на слейве
mysql -u root -p
use sape_test_db;
mysql> select * from admin_table;
+----+--------+-----------+------------------+
| id | name | surname | city |
+----+--------+-----------+------------------+
| 1 | Andrei | Ahmadulin | Ekaterinburg |
| 2 | Ilya | Paramonov | Moscow |
| 3 | Andrei | Zharkov | Moscow |
| 4 | Artem | Dolgiy | Zelenograd |
| 5 | Nikita | Samoilov | Sankt-Petersburg |
+----+--------+-----------+------------------+
5 rows in set (0,00 sec)