TxSQL 修改IP,以及元数据备份与恢复

  其他常见问题
内容纲要

概要描述


TxSQL存储了集群的元数据,为集群核心数据。
本文仅适用于在无法使用其他手段恢复TxSQL服务的情况下使用,例如当多数TxSQL节点出现了数据损坏、多数节点的IP被修改等导致集群的服务完全无法恢复的情况。

详细说明


TxSQL备份/恢复的主要步骤:

  1. 从流水最大的TxSQL节点的MySQL中备份数据
  2. 重新配置TxSQL服务
  3. 删除TxSQL每个节点上的数据目录,以强制TxSQL在下次重启时根据当前配置重新初始化服务
  4. 导入数据

一、获取元数据库密码,确定Master节点,查看流水

  1. 列出所有txsql-server的pod
    # kubectl get pods -owide|grep txsql
  2. 选择任一running状态的txsql-server-txsql的pod,进入bash命令行,例如:
    # kubectl exec -it txsql-server-txsql1-597f7ff996-sz55f bash
  3. 获取元数据库密码
    # cat /etc/txsql1/conf/db.properties | grep password

  4. 确定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
  5. 进入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,比如下图

  6. 使用socket方式登录mysql数据库,socket是上面获取到的–socket参数的信息,-p后面的密码是/etc/txsql1/conf/db.properties中的密码,例如:
    mysql --socket=/vdir/hadoop/txsql/percona.workspace/tmp/percona.sock -p'493761713'

  7. 查看流水,在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
  • 两种方式都备份,全库备份和单库备份。
  1. 备份元数据

    单库备份:

    • 进入txsql数据库 /usr/bin/txsql/tools/txsql.sh shell,确认需要备份的数据库,其中默认的information_schema、mysql、performance_schema、test库不需要备份;
      file

    • 逐个库备份数据

      /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

      file

    全库备份:

    /usr/bin/txsql/percona.src/bin/mysqldump -h -P -uroot -p --set-gtid-purged=off --triggers --routines --events  --all-databases > alldata.sql

  2. 将备份数据拷贝到pod外服务器上,例如:

    # scp alldata.sql @172.22.33.1:/tmp

四、重新配置服务(只有再 txsql IP地址被更改的情况才需要重新配置服务)

执行该步骤时,Manager中存储的IP信息已经修改。

  1. 登录 Manager 页面 (http://manager_ip:8180)
  2. 点击 TxSQL 组件,在TxSQL页面,点击 更多操作 > 配置服务
  3. 配置文件生成后,进入每个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

五、TxSQL重新初始化

删除每个pod的TxSQL数据目录内的全部内容,危险动作,请务必小心谨慎操作

  1. 进入TxSQL的pod;
  2. install_conf.sh 文件的的 DATA_DIR 参数来获取TxSQL数据目录路径,例如下例表示数据路径为/vdir/hadoop/txsql
    # cat install_conf.sh |grep DATA_DIR
    DATA_DIR=/vdir/hadoop/txsql
  3. 停止pod内所有服务,删除TxSQL数据:
    # /usr/bin/txsql/tools/txsql.sh kill
    //首先停止pod内所有服务
    # rm -rf /vdir/hadoop/txsql
    //再次提醒,危险操作,请确保备份的数据已经存储在pod之外的安全的目录下!
  4. 进入所有txsql pod,删除txsql数据;
  5. 所有txsql pod内的txsql数据删除之后,在Manager web界面重启txsql:
  6. 重启后,TxSQL应处于健康状态;

六、恢复数据

重新部署成功后,即可恢复数据:

  1. 查看当前txsql pod;
  2. 进入Master节点pod,将步骤三备份的数据上传到/usr/bin/txsql/tools目录下;
  3. 恢复数据:
    # 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的流水,确保所有节点的流水一致,即完成恢复,检查流水的方法参见步骤一。

这篇文章对您有帮助吗?

平均评分 5 / 5. 次数: 1

尚无评价,您可以第一个评哦!

非常抱歉,这篇文章对您没有帮助.

烦请您告诉我们您的建议与意见,以便我们改进,谢谢您。