4.5. 手动恢复 undercloud 节点数据库
如果 undercloud 数据库没有作为 undercloud 恢复过程的一部分恢复,您可以手动恢复数据库。您只能在之前创建的独立数据库备份时恢复数据库。
先决条件
- 您已创建了 undercloud 数据库的备份。有关备份 undercloud 数据库的更多信息,请参阅 第 1.5 节 “创建 undercloud 节点的备份”。
流程
-
以
root
用户身份登录 director undercloud 节点。 停止所有 tripleo 服务:
[root@director ~]# systemctl stop tripleo_*
输入以下命令确保没有容器在服务器上运行:
[root@director ~]# podman ps
如果有任何容器正在运行,请输入以下命令停止容器:
[root@director ~]# podman stop <container_name>
创建当前
/var/lib/mysql
目录的备份,然后删除该目录:[root@director ~]# cp -a /var/lib/mysql /var/lib/mysql_bck [root@director ~]# rm -rf /var/lib/mysql
重新创建数据库目录并为新目录设置 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
为
mariadb
镜像创建本地标签。将<image_id
> 和 <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
使用容器初始化
/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
复制您要导入到数据库的数据库备份文件:
[root@director ~]# cp /root/undercloud-all-databases.sql /var/lib/mysql
启动数据库服务以导入数据:
[root@director ~]# podman run --net=host -dt -v /var/lib/mysql:/var/lib/mysql localhost/mariadb /usr/libexec/mysqld
导入数据并配置
max_allowed_packet
参数:登录到容器并配置它:
[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
停止容器:
[root@director ~]# podman stop <container_id>
检查没有容器正在运行:
[root@director ~]# podman ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES [root@director ~]#
重启所有 tripleo 服务:
[root@director ~]# systemctl start multi-user.target