• Русский
  • Миграция данных MySQL-PXC в MySQL-MGR

    Предварительные требования

    • Узлы MySQL-PXC должны быть остановлены.

    • В кластере должно быть достаточно CPU, памяти, хранилища и других ресурсов для создания кластера MySQL-MGR с такими же характеристиками, как у MySQL-PXC.

    Примечания

    • На стороне приложения необходимо обновить драйвер MySQL до версии MySQL-MGR; можно обратиться к Connectors and APIs.

    • Используйте набор символов utf8mb4.

      • На стороне приложения следует использовать utf8mb4.

      • На стороне базы данных необходимо конвертировать библиотеку и таблицы в utf8mb4.

      SQL для конвертации набора символов приведён ниже.

      # Конвертация набора символов базы данных в utf8mb4
      ALTER DATABASE db_name DEFAULT CHARACTER SET = utf8mb4;
      
      # Конвертация набора символов таблицы в utf8mb4
      ALTER TABLE db_name.table_name CONVERT TO CHARACTER SET utf8mb4;

      Совет: Чем больше данных в таблице, тем дольше будет длиться конвертация.

    • MySQL-MGR требует, чтобы таблицы имели первичный ключ.

      • Если в таблице отсутствует первичный ключ, при импорте в MySQL-MGR автоматически создаётся INVISIBLE первичный ключ; рекомендуется, чтобы бизнес-сторона использовала явные первичные ключи.

        Совет: Он будет отображаться в SHOW TABLE, но при выполнении SELECT это поле скрыто.

      • Чтобы найти таблицы в бизнес-базе данных без первичного ключа:

        SELECT
            CONCAT(t1.TABLE_SCHEMA, '.', t1.TABLE_NAME)
        FROM
            information_schema.tables t1
                LEFT JOIN
            (SELECT DISTINCT
                t.TABLE_SCHEMA, t.TABLE_NAME, t.COLUMN_KEY
            FROM
                information_schema.`COLUMNS` t
            WHERE
                t.COLUMN_KEY = 'PRI') t2 ON t1.TABLE_SCHEMA = t2.TABLE_SCHEMA
                AND t1.TABLE_NAME = t2.TABLE_NAME
        WHERE
            t1.TABLE_SCHEMA NOT IN ('information_schema' , 'mysql', 'performance_schema', 'sys')
                AND t2.COLUMN_KEY IS NULL;
      • Добавить автоинкрементный первичный ключ:

        ALTER TABLE table_name ADD COLUMN id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY;

    Рабочий процесс

    Примечание: При использовании примерного кода из этого документа заменяйте параметры на реальные значения экземпляров.

    Проверка статуса кластера MySQL-PXC

    Статус кластера MySQL-PXC должен быть нормальным перед резервным копированием данных.

    1. В левой навигационной панели нажмите MySQL-PXC.

    2. Нажмите Namespace Name.

    3. Нажмите Instance Name.

    4. Во вкладке Details в разделах Basic Information, Resource Configuration и статусе ProxySQL должно быть значение Running.

    5. Во вкладке Topology статус каждого ProxySQL и MySQL узла должен быть Normal.

    Определение узлов чтения/записи MySQL-PXC

    1. Найдите IP ProxySQL.

      [root@g1-rm1 ~]# kubectl get pod -n demo-ds1 -owide | grep 'proxysql'
      demo-proxysql-0                 3/3     Running   0               4h57m   10.4.0.28     192.168.176.247   <none>           <none>
      demo-proxysql-1                 3/3     Running   0               4h57m   10.4.0.49     192.168.177.35    <none>           <none>
      demo-proxysql-2                 3/3     Running   0               4h57m   10.4.0.54     192.168.176.25    <none>           <none>
    2. Подключитесь к любому Pod ProxySQL, чтобы найти узлы чтения/записи.

      # kubectl exec -it demo-proxysql-0 -c proxysql -n demo-ds1 -- mysql -uproxyadmin -h10.4.0.28 -p'jtr8eO0kS?lq' -P6032 -e "SELECT * FROM runtime_mysql_servers WHERE hostgroup_id=11"
      mysql: [Warning] Using a password on the command line interface can be insecure.
      +--------------+------------------------------------------------+------+-----------+--------+--------+-------------+-----------------+---------------------+---------+----------------+---------+
      | hostgroup_id | hostname                                       | port | gtid_port | status | weight | compression | max_connections | max_replication_lag | use_ssl | max_latency_ms | comment |
      +--------------+------------------------------------------------+------+-----------+--------+--------+-------------+-----------------+---------------------+---------+----------------+---------+
      | 11           | demo-pxc-0.demo-pxc.demo-ds1.svc.cluster.local | 3306 | 0         | ONLINE | 1001   | 0           | 600             | 0                   | 0       | 0              |         |
      +--------------+------------------------------------------------+------+-----------+--------+--------+-------------+-----------------+---------------------+---------+----------------+---------+

    По выводу определите имя MySQL-PXC, к которому принадлежит узел чтения/записи demo-pxc-0.demo-pxc.demo-ds1.svc.cluster.local.

    [root@g1-rm1 ~]# kubectl exec -it demo-pxc-0 -n demo-ds1 -- mysql -uroot -hlocalhost -p'jtr8eO0kS?lq' -e "SHOW GLOBAL STATUS LIKE 'wsrep_cluster_state_uuid'"
    mysql: [Warning] Using a password on the command line interface can be insecure.
    +--------------------------+--------------------------------------+
    | Variable_name            | Value                                |
    +--------------------------+--------------------------------------+
    | wsrep_cluster_state_uuid | 60fd1cc7-1628-11ee-90b2-c6e61fc5eaef |
    +--------------------------+--------------------------------------+
    
    [root@g1-rm1 ~]# kubectl exec -it demo-pxc-1 -n demo-ds1 -- mysql -uroot -hlocalhost -p'jtr8eO0kS?lq' -e "SHOW GLOBAL STATUS LIKE 'wsrep_cluster_state_uuid'"
    mysql: [Warning] Using a password on the command line interface can be insecure.
    +--------------------------+--------------------------------------+
    | Variable_name            | Value                                |
    +--------------------------+--------------------------------------+
    | wsrep_cluster_state_uuid | 60fd1cc7-1628-11ee-90b2-c6e61fc5eaef |
    +--------------------------+--------------------------------------+
    
    [root@g1-rm1 ~]# kubectl exec -it demo-pxc-2 -n demo-ds1 -- mysql -uroot -hlocalhost -p'jtr8eO0kS?lq' -e "SHOW GLOBAL STATUS LIKE 'wsrep_cluster_state_uuid'"
    mysql: [Warning] Using a password on the command line interface can be insecure.
    +--------------------------+--------------------------------------+
    | Variable_name            | Value                                |
    +--------------------------+--------------------------------------+
    | wsrep_cluster_state_uuid | 60fd1cc7-1628-11ee-90b2-c6e61fc5eaef |
    +--------------------------+--------------------------------------+

    Остановка внешних сервисов MySQL-PXC

    Примечание: Не выполняйте операции записи на стороне приложения, так как это приведёт к неполной резервной копии.

    1. В левой навигационной панели нажмите MySQL-PXC.

    2. Нажмите Namespace Name.

    3. Нажмите Instance Name.

    4. Нажмите Actions > Update.

    5. Нажмите YAML.

    6. Измените значение параметра pxc.proxysql.size на 0.

    7. Нажмите Update.

    Создание экземпляра MySQL-MGR

    Примечание: Спецификации ресурсов создаваемого экземпляра MySQL-MGR не должны быть ниже, чем у экземпляра MySQL-PXC.

    Проверка статуса кластера MySQL-MGR

    1. В левой навигационной панели нажмите MySQL-MGR.

    2. Нажмите Namespace Name.

    3. Нажмите Instance Name.

    4. Во вкладке Details в разделах Basic Information, Resource Configuration и статусе MySQL Router должно быть значение Running.

    5. Во вкладке YAML значения status.conditions.type и status.state должны быть ready.

    Определение узлов чтения/записи MySQL-MGR

    Узлы с MEMBER_ROLE равным PRIMARY являются узлами чтения/записи MySQL-MGR.

    [root@g1-rm1 ~]# kubectl exec -it demo-0 -c mysql -n demo-ds1 -- mysql -uroot -hlocalhost -p'GLK1nqWF17JqrvpJ' -e "SELECT * FROM performance_schema.replication_group_members"
    mysql: [Warning] Using a password on the command line interface can be insecure.
    +---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+----------------------------+
    | CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION | MEMBER_COMMUNICATION_STACK |
    +---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+----------------------------+
    | group_replication_applier | 5bc1839e-162a-11ee-a212-00000071f44e | demo-0.demo |        3306 | ONLINE       | PRIMARY     | 8.0.30         | MySQL                      |
    | group_replication_applier | 6f9f1f36-162a-11ee-a21a-000000ade638 | demo-1.demo |        3306 | ONLINE       | SECONDARY   | 8.0.30         | MySQL                      |
    | group_replication_applier | 96300b66-162a-11ee-a33f-00000093bb13 | demo-2.demo |        3306 | ONLINE       | SECONDARY   | 8.0.30         | MySQL                      |
    +---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+----------------------------+

    Определение баз данных, которые нужно резервировать из MySQL-PXC

    • Исключите системные базы данных MySQL: information_schema, mysql, performance_schema и sys.

    • Для бизнес-баз данных: зафиксируйте бизнес-базы данных для резервного копирования и при использовании инструмента mysqldump указывайте базы данных с помощью опции -B.

    Например, из следующего списка баз данных необходимо резервировать бизнес-базы test1, test2 и test3.

    [root@g1-rm1 ~]# kubectl exec -it demo-pxc-0 -n demo-ds1 -c pxc -- mysql -uroot -p'jtr8eO0kS?lq' -h10.4.0.35 -e "SHOW DATABASES"
    mysql: [Warning] Using a password on the command line interface can be insecure.
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | mysql              |
    | performance_schema |
    | sys                |
    | test1              |
    | test2              |
    | test3              |
    +--------------------+

    Развёртывание контейнера MySQL-MGR для резервного копирования и восстановления

    Создание PVC

    1. В представлении Container Platform в левой навигационной панели нажмите Storage > Persistent Volume Claims.

    2. Нажмите Create Persistent Volume Claim.

    3. Заполните параметры конфигурации PVC.

      Примечание: Используйте TopoLVM в качестве класса хранилища.

    4. Нажмите Create; статус PVC должен быть Pending Binding.

    Создание PV

    Обратитесь к Platform Administrator для создания PV на основе следующего YAML. После создания PV проверьте, что статус PVC стал Bound.

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: mgr-backcup-pv # имя pv
      annotations: {}
      labels: {}
    spec:
      capacity:
        storage: 5Gi # указать ёмкость хранилища
      csi:
        driver: topolvm.cybozu.com
        volumeHandle: baef103d-d2de-4ca9-bb4b-1dad722975b9
        fsType: xfs
      accessModes:
        - ReadWriteOnce
      claimRef:
        kind: PersistentVolumeClaim
        namespace: demo-ds1	# указать namespace
        name: mgr-backcup-pvc # указать имя для привязки PVC
      persistentVolumeReclaimPolicy: Delete
      storageClassName: sc-topolvm # указать класс хранилища
      volumeMode: Filesystem
      nodeAffinity:
        required:
          nodeSelectorTerms:
            - matchExpressions:
                - key: topology.topolvm.cybozu.com/node
                  operator: In
                  values:
                    - 192.168.177.35 # указать IP хоста, где создаётся PV

    Развёртывание контейнера MySQL-MGR

    1. Проверьте адрес образа MySQL-MGR.

      [root@g1-rm1 ~]# kubectl get pod demo-0 -n demo-ds1 -o yaml | grep 'image:' | grep 'mysql-server'
          image: idc1.xmysql.com/3rdparty/mysql/mysql-server:8.0.30-cfd84cde
          image: idc1.xmysql.com/3rdparty/mysql/mysql-server:8.0.30-cfd84cde
    2. В представлении Container Platform в левой навигационной панели нажмите Compute Components > Deployments.

    3. Нажмите Create Deployment.

    4. Выберите метод Input, заполните Image Address и нажмите OK.

    5. В разделе Pods > Volumes нажмите Add.

    6. Заполните конфигурацию тома, используя PVC, созданный в этом документе, в качестве тома хранения для контейнера MySQL.

    7. Нажмите Add.

    8. Заполните конфигурацию контейнера.

    9. Нажмите Create.

    Резервное копирование бизнес-баз данных MySQL-PXC

    1. Получите IP Pod чтения/записи MySQL-PXC.

      [root@g1-rm1 ~]# kubectl get pod -o wide -n demo-ds1 | grep 'pxc'
      demo-pxc-0                      3/3     Running   0              4d4h    10.4.0.35     192.168.176.227   <none>           <none>
      demo-pxc-1                      3/3     Running   0              4d4h    10.4.0.70     192.168.176.247   <none>           <none>
      demo-pxc-2                      3/3     Running   0              4d4h    10.4.0.162    192.168.176.25    <none>           <none>
    2. Получите пароль root для MySQL-PXC.

      [root@g1-rm1 ~]# kubectl exec -it demo-pxc-0 -n demo-ds1 -c pxc -- /bin/bash
      bash-5.1$ env | grep 'MYSQL_ROOT_PASSWORD'
      MYSQL_ROOT_PASSWORD=jtr8eO0kS?lq
    3. Войдите в контейнер резервного копирования и восстановления MySQL, созданный в этом документе, например, Pod с именем mgr-backcup-9f87d46c4-kwkps.

      [root@g1-rm1 ~]# kubectl exec -it mgr-backcup-9f87d46c4-kwkps -n demo-ds1 -- /bin/bash

      Совет: Имя Pod можно посмотреть в списке контейнерных групп этого развертывания.

    4. Выполните резервное копирование бизнес-базы данных.

      [root@mgr-backcup-9f87d46c4-kwkps /]# mysqldump --user=root --host=10.4.0.35 --password='jtr8eO0kS?lq' --column-statistics=0 --single-transaction --source-data=1 --set-gtid-purged=AUTO --triggers -R -E -B test1 test2 test3 > /var/lib/mysql/$(date +"%Y%m%d%H%M%S")_fullbackup.sql
      mysqldump: [Warning] Using a password on the command line interface can be insecure.

      Объяснение параметров:

      --password: пароль root MySQL-PXC.

      --host: IP адрес Pod чтения/записи MySQL-PXC.

      -B: указать имена бизнес-баз данных для резервного копирования в MySQL-PXC, разделённые пробелами.

    5. Проверьте размер логической резервной копии.

      [root@mgr-backcup-9f87d46c4-kwkps /]# du -lh /var/lib/mysql/20230705102203_fullbackup.sql
      677M	/var/lib/mysql/20230705102203_fullbackup.sql

    Восстановление бизнес-данных

    [root@g1-rm1 ~]# kubectl get pod demo-0 -n demo-ds1 -o wide
    NAME     READY   STATUS    RESTARTS   AGE   IP           NODE             NOMINATED NODE   READINESS GATES
    demo-0   3/3     Running   0          20h   10.4.0.170   192.168.177.35   <none>           <none>
    
    [root@g1-rm1 ~]# kubectl exec -it mgr-backcup-9f87d46c4-kwkps -n demo-ds1 -- /bin/bash
    
    [root@mgr-backcup-9f87d46c4-kwkps /]# mysql -uroot -h10.4.0.170 -p'GLK1nqWF17JqrvpJ' < /var/lib/mysql/20230705102203_fullbackup.sql
    mysql: [Warning] Using a password on the command line interface can be insecure.
    
    
    [root@mgr-backcup-9f87d46c4-kwkps /]# mysql -uroot -h10.4.0.170 -p'GLK1nqWF17JqrvpJ'
    mysql: [Warning] Using a password on the command line interface can be insecure.
    Welcome to the MySQL monitor.  Commands end with ; or \g.
    Your MySQL connection id is 367123
    Server version: 8.0.30 MySQL Community Server - GPL
    
    Copyright (c) 2000, 2022, Oracle and/or its affiliates.
    
    Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners.
    
    Cannot read termcap database;
    using dumb terminal settings.
    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
    
    mysql> SHOW DATABASES;
    +-------------------------------+
    | Database                      |
    +-------------------------------+
    | information_schema            |
    | mysql                         |
    | mysql_innodb_cluster_metadata |
    | performance_schema            |
    | sys                           |
    | test1                         |
    | test2                         |
    | test3                         |
    +-------------------------------+
    8 rows in set (0.01 sec)
    
    mysql> use test1;
    Reading table information for completion of table and column names
    You can turn off this feature to get a quicker startup with -A
    
    Database changed
    mysql> SHOW TABLES;
    +-----------------+
    | Tables_in_test1 |
    +-----------------+
    | sbtest1         |
    | sbtest2         |
    | sbtest3         |
    | sbtest4         |
    | sbtest5         |
    | sbtest6         |
    +-----------------+
    6 rows in set (0.01 sec)
    
    mysql> SELECT COUNT(1) FROM test1.sbtest1;
    +----------+
    | COUNT(1) |
    +----------+
    |   200000 |
    +----------+
    1 row in set (0.03 sec)
    
    mysql> SHOW CREATE TABLE test2.sbtest1\G
    *************************** 1. row ***************************
           Table: sbtest1
    Create Table: CREATE TABLE `sbtest1` (
      `my_row_id` bigint unsigned NOT NULL AUTO_INCREMENT /*!80023 INVISIBLE */,
      `k` int NOT NULL DEFAULT '0',
      `c` char(120) NOT NULL DEFAULT '',
      `pad` char(60) NOT NULL DEFAULT '',
      PRIMARY KEY (`my_row_id`),
      KEY `k_1` (`k`)
    ) ENGINE=InnoDB AUTO_INCREMENT=200003 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
    1 row in set (0.00 sec)
    
    mysql> SHOW CREATE TABLE test3.sbtest1\G
    *************************** 1. row ***************************
           Table: sbtest1
    Create Table: CREATE TABLE `sbtest1` (
      `id` int NOT NULL AUTO_INCREMENT,
      `k` int NOT NULL DEFAULT '0',
      `c` char(120) NOT NULL DEFAULT '',
      `pad` char(60) NOT NULL DEFAULT '',
      PRIMARY KEY (`id`),
      KEY `k_1` (`k`)
    ) ENGINE=InnoDB AUTO_INCREMENT=600001 DEFAULT CHARSET=utf8mb3
    1 row in set (0.00 sec)

    Резервное копирование бизнес-аккаунтов MySQL-PXC

    1. Войдите в Pod MySQL-MGR для резервного копирования таблицы пользователей MySQL-PXC.

      [root@g1-rm1 ~]# kubectl exec -it mgr-backcup-9f87d46c4-kwkps -n demo-ds1 -- /bin/bash
      
      [root@mgr-backcup-9f87d46c4-kwkps /]# mysqldump --user=root --host=10.4.0.35 --password='jtr8eO0kS?lq' --column-statistics=0 --single-transaction --source-data=1 --set-gtid-purged=AUTO --triggers -R -E mysql user > /var/lib/mysql/$(date +"%Y%m%d%H%M%S")_mysql.user.sql
      
      [root@mgr-backcup-9f87d46c4-kwkps /]# du -lh /var/lib/mysql/20230705132502_mysql.user.sql
      8.0K	/var/lib/mysql/20230705132502_mysql.user.sql
    2. Получите SQL-запросы для аккаунтов: INSERT INTO.

      [root@mgr-backcup-9f87d46c4-kwkps /]# cat /var/lib/mysql/20230705132502_mysql.user.sql | grep 'INSERT INTO'
      INSERT INTO `user` VALUES ('localhost','root','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0,0,'mysql_native_password','*40C19F6316A46A0E68DCCBC18034271BE5DDD704','N','2023-06-29 02:55:28',NULL,'N'),('localhost','mysql.session','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','Y','N','N','N','N','N','N','N','N','N','N','N','N','N','','','','',0,0,0,0,'mysql_native_password','*THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE','N','2023-06-29 02:55:09',NULL,'Y'),('localhost','mysql.sys','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','','','','',0,0,0,0,'mysql_native_password','*THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE','N','2023-06-29 02:55:09',NULL,'Y'),('%','root','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0,0,'mysql_native_password','*40C19F6316A46A0E68DCCBC18034271BE5DDD704','N','2023-06-29 02:55:28',NULL,'N'),('%','operator','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0,0,'mysql_native_password','*40C19F6316A46A0E68DCCBC18034271BE5DDD704','N','2023-06-29 02:55:28',NULL,'N'),('%','xtrabackup','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','N','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0,0,'mysql_native_password','*40C19F6316A46A0E68DCCBC18034271BE5DDD704','N','2023-06-29 02:55:28',NULL,'N'),('%','monitor','Y','N','N','N','N','N','Y','N','Y','N','N','N','N','N','N','Y','N','N','N','N','Y','N','N','N','N','N','N','N','N','','','','',0,0,0,100,'mysql_native_password','*40C19F6316A46A0E68DCCBC18034271BE5DDD704','N','2023-06-29 02:55:28',NULL,'N'),('localhost','clustercheck','N','N','N','N','N','N','N','N','Y','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','','','','',0,0,0,0,'mysql_native_password','*40C19F6316A46A0E68DCCBC18034271BE5DDD704','N','2023-06-29 02:55:28',NULL,'N'),('%','test_user_2','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','N','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0,0,'mysql_native_password','*BFC6130681D565DDE4C938BCDCD36073776A8F99','N','2023-07-03 07:13:13',NULL,'N'),('%','test_user_3','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','N','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0,0,'mysql_native_password','*BFC6130681D565DDE4C938BCDCD36073776A8F99','N','2023-07-03 07:13:13',NULL,'N'),('%','test_user_1','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','N','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0,0,'mysql_native_password','*BFC6130681D565DDE4C938BCDCD36073776A8F99','N','2023-07-03 07:14:52',NULL,'N');
    3. Удалите системных пользователей MySQL-PXC, оставив только бизнес-аккаунты.

      • Удалите системные аккаунты: ('localhost','root'), ('localhost','mysql.session'), ('localhost','mysql.sys'), ('%','root'), ('%','operator'), ('%','monitor'), ('localhost','clustercheck').

      • Оставьте бизнес-аккаунты: test_user_1, test_user_2, test_user_3.

        INSERT INTO `user` VALUES ('%','test_user_2','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','N','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0,0,'mysql_native_password','*BFC6130681D565DDE4C938BCDCD36073776A8F99','N','2023-07-03 07:13:13',NULL,'N'),('%','test_user_3','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','N','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0,0,'mysql_native_password','*BFC6130681D565DDE4C938BCDCD36073776A8F99','N','2023-07-03 07:13:13',NULL,'N'),('%','test_user_1','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','N','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0,0,'mysql_native_password','*BFC6130681D565DDE4C938BCDCD36073776A8F99','N','2023-07-03 07:14:52',NULL,'N');

    Импорт бизнес-аккаунтов приложения

    1. Измените вставляемые записи аккаунтов.

      Примечание: Не импортируйте root-аккаунт.

      В MySQL-MGR в таблицу mysql.user добавлено 6 полей по сравнению с MySQL-PXC, поэтому при вставке записей аккаунтов необходимо добавить следующие 6 полей: Create_role_priv: Y, Drop_role_priv: Y, Password_reuse_history: NULL, Password_reuse_time: NULL, Password_require_current: NULL, User_attributes: NULL. То есть к каждой записи вставки добавить значения: , 'Y', 'Y', NULL, NULL, NULL, NULL.

      INSERT INTO `user` VALUES ('%','test_user_2','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','N','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0,0,'mysql_native_password','*BFC6130681D565DDE4C938BCDCD36073776A8F99','N','2023-07-03 07:13:13',NULL,'N', 'Y', 'Y', NULL, NULL, NULL, NULL),('%','test_user_3','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','N','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0,0,'mysql_native_password','*BFC6130681D565DDE4C938BCDCD36073776A8F99','N','2023-07-03 07:13:13',NULL,'N', 'Y', 'Y', NULL, NULL, NULL, NULL),('%','test_user_1','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','N','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0,0,'mysql_native_password','*BFC6130681D565DDE4C938BCDCD36073776A8F99','N','2023-07-03 07:14:52',NULL,'N', 'Y', 'Y', NULL, NULL, NULL, NULL);
    2. Вставьте записи аккаунтов в MySQL-MGR.

      [root@g1-rm1 ~]# kubectl exec -it mgr-backcup-9f87d46c4-kwkps -n demo-ds1 -- /bin/bash
      
      [root@g1-rm1 ~]# mysql -uroot -h10.4.0.170 -p'GLK1nqWF17JqrvpJ'
      
      mysql> use mysql
      Reading table information for completion of table and column names
      You can turn off this feature to get a quicker startup with -A
      
      mysql> INSERT INTO `user` VALUES ('%','test_user_2','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','N','Y','Y','Y','Y','Y','Y','Y','Y','
      Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0,0,'mysql_native_password','*BFC6130681D565DDE4C938BCDCD36073776A8F99','N
      ','2023-07-03 07:13:13',NULL,'N', 'Y', 'Y', NULL, NULL, NULL, NULL),('%','test_user_3','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','N
      ','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0,0,'mysql_native_password','*BFC613068
      1D565DDE4C938BCDCD36073776A8F99','N','2023-07-03 07:13:13',NULL,'N', 'Y', 'Y', NULL, NULL, NULL, NULL),('%','test_user_1','Y','Y'
      ,'Y','Y','Y','Y','Y','Y','Y','Y','N','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0,0,
      'mysql_native_password','*BFC6130681D565DDE4C938BCDCD36073776A8F99','N','2023-07-03 07:14:52',NULL,'N', 'Y', 'Y', NULL, NULL, NUL
      L, NULL);
      Query OK, 3 rows affected (0.01 sec)
      Records: 3  Duplicates: 0  Warnings: 0
      
      mysql> FLUSH PRIVILEGES;
      Query OK, 0 rows affected (0.01 sec)
      
      mysql> SELECT user,host,plugin FROM mysql.user WHERE user LIKE 'test%';
      +-------------+------+-----------------------+
      | user        | host | plugin                |
      +-------------+------+-----------------------+
      | test_user_1 | %    | mysql_native_password |
      | test_user_2 | %    | mysql_native_password |
      | test_user_3 | %    | mysql_native_password |
      +-------------+------+-----------------------+
      3 rows in set (0.00 sec)
    3. Проверьте, работают ли аккаунты корректно.

      [root@g1-rm1 ~]# kubectl get pod -n demo-ds1 -o wide | grep demo
      demo-0                          3/3     Running   0               4d11h   10.4.0.170    192.168.177.35    <none>           <none>
      demo-1                          3/3     Running   1 (4d11h ago)   4d11h   10.4.0.176    192.168.176.247   <none>           <none>
      demo-2                          3/3     Running   1 (4d11h ago)   4d11h   10.4.0.198    192.168.176.227   <none>           <none>
      
      [root@mgr-backcup-9f87d46c4-kwkps /]# mysql -utest_user_1 -h10.4.0.170 -p'zEjQM96Ha1=v' -e "SELECT USER()";
      mysql: [Warning] Using a password on the command line interface can be insecure.
      +-------------------------+
      | USER()                  |
      +-------------------------+
      | test_user_1@10.4.210.58 |
      +-------------------------+
      [root@mgr-backcup-9f87d46c4-kwkps /]# mysql -utest_user_2 -h10.4.0.176 -p'zEjQM96Ha1=v' -e "SELECT USER()";
      mysql: [Warning] Using a password on the command line interface can be insecure.
      +-------------------------+
      | USER()                  |
      +-------------------------+
      | test_user_2@10.4.210.58 |
      +-------------------------+
      [root@mgr-backcup-9f87d46c4-kwkps /]# mysql -utest_user_3 -h10.4.0.198 -p'zEjQM96Ha1=v' -e "SELECT USER()";
      mysql: [Warning] Using a password on the command line interface can be insecure.
      +-------------------------+
      | USER()                  |
      +-------------------------+
      | test_user_3@10.4.210.58 |
      +-------------------------+

    Дополнительно: Использование метода резервного копирования mysqldump на вычислительном узле (хосте)

    Если в текущем кластере недостаточно ресурсов и кластер MySQL-MGR с такими же характеристиками не развернут, можно использовать mysqldump на хост-машине для выполнения резервного копирования.

    Процедура:

    1. Убедитесь, что статус кластера MySQL-PXC нормальный.

    2. Остановите бизнес-операции чтения/записи и установите количество реплик ProxySQL в 0.

    3. Выполните резервное копирование MySQL-PXC.