内容纲要
概要描述
TxSQL存储了集群的元数据,为集群核心数据。
本文仅适用于在无法使用其他手段恢复TxSQL服务的情况下使用,例如当多数TxSQL节点出现了数据损坏、多数节点的IP被修改等导致集群的服务完全无法恢复的情况。
详细说明
TxSQL备份/恢复的主要步骤:
- 从流水最大的TxSQL节点的MySQL中备份数据
- 重新配置TxSQL服务
- 删除TxSQL每个节点上的数据目录,以强制TxSQL在下次重启时根据当前配置重新初始化服务
- 导入数据
一、获取元数据库密码,确定Master节点,查看流水
- 列出所有txsql-server的pod
# kubectl get pods -owide|grep txsql
- 选择任一running状态的txsql-server-txsql的pod,进入bash命令行,例如:
# kubectl exec -it txsql-server-txsql1-597f7ff996-sz55f bash
- 获取元数据库密码
# cat /etc/txsql1/conf/db.properties | grep password
- 确定Master节点:
执行 /usr/bin/txsql/tools/txsql.sh list 命令列出所有txsql,该命令会同时输出master节点IP信息,例如master 172.22.22.61:[root@tdh-62 tools]# /usr/bin/txsql/tools/txsql.sh list get master 172.22.22.61 expire time 1564037694 Thu Jul 25 14:54:54 2019 ip 172.22.22.61 port 17000 ip 172.22.22.62 port 17000 ip 172.22.22.63 port 17000 ```shell
- 进入Master节点pod,查看mysql的socket
# exit //退出之前进入的pod # kubectl exec -it txsql-server-txsql1-7bd54d899f-k89lg bash //根据第4步,可以知道Master节点IP,然后根据第1步,知道Master节点的pod ID,从而可以进入Master节点的pod # ps -ef |grep mysqld //查看mysql的socket,比如下图
- 使用socket方式登录mysql数据库,socket是上面获取到的–socket参数的信息,-p后面的密码是/etc/txsql1/conf/db.properties中的密码,例如:
mysql --socket=/vdir/hadoop/txsql/percona.workspace/tmp/percona.sock -p'493761713'
- 查看流水,在mysql中执行:
- show master status\G可以查看Master节点流水,如下图的1-8787
- show slave status\G可以查看Slave节点流水
# show master status\G
Executed_Gtid_Set是当前这个节点已经执行过的binlog集合,它一般是多条 : – 的形式,又被称为流水,该节点目前已经执行了ID为866b1b3b-8988-11e9-a3b0-000c29a257e2的服务器上的第1-8787个binlog,必须选择一个包含的binlog最多(即所有的条目中END数值均为最大)的mysql来作为数据备份的对象,因为它包含最新的数据,一般Masater节点上的流水最大
二、修改数据库中IP地址
仅在IP发生变更的环境中执行此步骤。
在流水最大的节点上(一般为Master节点),进入mysql,修改mysq.user中host列的IP地址,将旧的IP地址更改为新的IP地址:
mysql> set global super_read_only=0;
mysql> set global read_only=0;
mysql> set sql_log_bin=0;
mysql> update mysql.user set host = new_ip where host = old_ip;
例如:
三、备份数据
注意:
- 在流水最大节点上(一般为Master节点),使用mysqldump工具备份数据。
- 数据备份后,请务必将备份的数据拷贝到
pod之外、安全的目录
下! - 备份数据文件后缀为 .sql ;
- 两种方式都备份,全库备份和单库备份。
-
备份元数据
单库备份:
-
进入txsql数据库 /usr/bin/txsql/tools/txsql.sh shell,确认需要备份的数据库,其中默认的information_schema、mysql、performance_schema、test库不需要备份;
-
逐个库备份数据
/usr/bin/txsql/percona.src/bin/mysqldump -h172.22.17.1 -P3316 -uroot -p207898110 --set-gtid-purged=off --triggers --routines --databases workflow_workflow1 > workflow.sql
全库备份:
/usr/bin/txsql/percona.src/bin/mysqldump -h
-P -uroot -p --set-gtid-purged=off --triggers --routines --events --all-databases > alldata.sql -
-
将备份数据拷贝到pod外服务器上,例如:
# scp alldata.sql @172.22.33.1:/tmp
四、重新配置服务(只有再 txsql IP地址被更改的情况才需要重新配置服务)
执行该步骤时,Manager中存储的IP信息已经修改。
- 登录 Manager 页面 (http://manager_ip:8180)
- 点击 TxSQL 组件,在TxSQL页面,点击 更多操作 > 配置服务
- 配置文件生成后,进入每个txsql的pod,检查下列文件中IP地址信息是否正确:
- TDH 5.x
- /usr/bin/txsql/etc/install_conf.sh
- /usr/bin/txsql/etc/txsql-env.sh
- TDH 6.x
- /etc/txsql1/conf/install_conf.sh
- /etc/txsql1/conf/txsql-env.sh
- TDH 5.x
五、TxSQL重新初始化
删除每个pod的TxSQL数据目录内的全部内容,危险动作,请务必小心谨慎操作。
- 进入TxSQL的pod;
- 从 install_conf.sh 文件的的 DATA_DIR 参数来获取TxSQL数据目录路径,例如下例表示数据路径为/vdir/hadoop/txsql
# cat install_conf.sh |grep DATA_DIR DATA_DIR=/vdir/hadoop/txsql
- 停止pod内所有服务,删除TxSQL数据:
# /usr/bin/txsql/tools/txsql.sh kill //首先停止pod内所有服务 # rm -rf /vdir/hadoop/txsql //再次提醒,危险操作,请确保备份的数据已经存储在pod之外的安全的目录下!
- 进入所有txsql pod,删除txsql数据;
- 所有txsql pod内的txsql数据删除之后,在Manager web界面重启txsql:
- 重启后,TxSQL应处于健康状态;
六、恢复数据
重新部署成功后,即可恢复数据:
- 查看当前txsql pod;
- 进入Master节点pod,将步骤三备份的数据上传到/usr/bin/txsql/tools目录下;
- 恢复数据:
# cd /usr/bin/txsql/tools ./txsql.sh shell # 注意要source两次,第一次source之后执行 flush privileges; flush privileges 前必须要先 set sql_log_bin=0,否则会引起严重的错误,然后再source一次 mysql> set global super_read_only=off; mysql> set global read_only=off; mysql> source alldata.sql mysql> set sql_log_bin=0; mysql> update user set password=password('password') where user = 'inceptoruser'; mysql> GRANT ALL PRIVILEGES ON *.* TO inceptoruser@'%' IDENTIFIED BY 'password'; mysql> flush privileges; mysql> source alldata.sql
七、检查操作
检查txsql的流水,确保所有节点的流水一致,即完成恢复,检查流水的方法参见步骤一。