4.5. 手动恢复 undercloud 节点数据库

如果 undercloud 数据库没有作为 undercloud 恢复过程的一部分恢复,您可以手动恢复数据库。您只能在之前创建的独立数据库备份时恢复数据库。

先决条件

流程

  1. root 用户身份登录 director undercloud 节点。
  2. 停止所有 tripleo 服务:

    [root@director ~]# systemctl  stop  tripleo_*
  3. 输入以下命令确保没有容器在服务器上运行:

    [root@director ~]# podman ps

    如果有任何容器正在运行,请输入以下命令停止容器:

    [root@director ~]# podman stop <container_name>
  4. 创建当前 /var/lib/mysql 目录的备份,然后删除该目录:

    [root@director ~]# cp -a /var/lib/mysql /var/lib/mysql_bck
    [root@director ~]# rm -rf /var/lib/mysql
  5. 重新创建数据库目录并为新目录设置 SELinux 属性:

    [root@director ~]# mkdir /var/lib/mysql
    [root@director ~]# chown 42434:42434 /var/lib/mysql
    [root@director ~]# chmod 0755 /var/lib/mysql
    [root@director ~]# chcon -t container_file_t /var/lib/mysql
    [root@director ~]# chcon -r object_r /var/lib/mysql
    [root@director ~]# chcon -u system_u /var/lib/mysql
  6. mariadb 镜像创建本地标签。将 <image_id &gt ; 和 <undercloud.ctlplane.example.com > 替换为环境中适用的值:

    [root@director ~]# podman images | grep mariadb
    <undercloud.ctlplane.example.com>:8787/rh-osbs/rhosp16-openstack-mariadb                 	16.2_20210322.1   <image_id>   3 weeks ago   718 MB
    [root@director ~]# podman tag <image_id> mariadb
    [root@director ~]# podman images | grep maria
    localhost/mariadb                                                                         	latest        	<image_id>   3 weeks ago   718 MB
    <undercloud.ctlplane.example.com>:8787/rh-osbs/rhosp16-openstack-mariadb                 	16.2_20210322.1   <image_id>   3 weeks ago   718 MB
  7. 使用容器初始化 /var/lib/mysql 目录:

    [root@director ~]# podman run --net=host -v /var/lib/mysql:/var/lib/mysql localhost/mariadb mysql_install_db --datadir=/var/lib/mysql --user=mysql
  8. 复制您要导入到数据库的数据库备份文件:

    [root@director ~]# cp /root/undercloud-all-databases.sql /var/lib/mysql
  9. 启动数据库服务以导入数据:

    [root@director ~]# podman run --net=host -dt -v /var/lib/mysql:/var/lib/mysql  localhost/mariadb  /usr/libexec/mysqld
  10. 导入数据并配置 max_allowed_packet 参数:

    1. 登录到容器并配置它:

      [root@director ~]# podman exec -it <container_id> /bin/bash
          ()[mysql@5a4e429c6f40 /]$ mysql -u root -e "set global max_allowed_packet = 1073741824;"
          ()[mysql@5a4e429c6f40 /]$ mysql -u root < /var/lib/mysql/undercloud-all-databases.sql
          ()[mysql@5a4e429c6f40 /]$ mysql -u root -e 'flush privileges'
          ()[mysql@5a4e429c6f40 /]$ exit
          exit
    2. 停止容器:

      [root@director ~]# podman stop <container_id>
    3. 检查没有容器正在运行:

      [root@director ~]# podman ps
      CONTAINER ID  IMAGE  COMMAND  CREATED  STATUS  PORTS  NAMES
      [root@director ~]#
  11. 重启所有 tripleo 服务:

    [root@director ~]# systemctl start multi-user.target