0%

hive mysql元数据表单的主从备份

hive元数据库和使用介绍

  • hive 会将表的元数据信息存储在数据库中,这里采用mysql作为元数据库存储hive的元数据

  • 元数据表中记录着很多hive中有用的信息,比如数据库实例,表,表结构,还有表数据的条数

  • 表数据条数只有在hive为内部表时的统计是准确的,如果建立的表为外部表 (external)则需要执行统计语句才能得到准确结果

    1
    ANALYZE TABLE tablename COMPUTE STATISTICS;
  • 使用元数据表中的统计数据可以很简单快捷的得到hive的元数据,比如表的数量,和数据量

mysql主从介绍

  • mysql主从时利用mysql的日志来完成主从的,所以在做主从设置时,先要保证主数据库和从数据库数据的一致

迁移数据

  • 如果主数据库中已经在做主从时已经存在数据那么,先将主数据库中数据复制到从数据库中,从而保证主数据库和从数据库数据的一致

配置主数据库配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
vi /etc/my.cnf
#将以下信息填入
server-id=1 #Mysql服务的唯一编号 每个mysql服务Id需唯一
log-bin=mysql-bin #logbin的名字
# 根据高性能mysql中提到,两个参数慎用,不应该开启他们,会导致主备同步出错,应该在备库中使用replicate-do-db或者replicate-ignore-db来过滤,
#比如 use test; delete from sakila.film binlog-do-db和 binlog-ignore-db都会在test数据库上过滤delete语句,而不是在sakila上,从而导致同步出错
#binlog-do-db=metastore #需要同步的数据库的名字,如果是多个数据库存在多条
#binlog-ignore-db=test01 #不需要同步的数据库的名字
log-slave-updates=1 #log更新间隔
slave-skip-errors=1 #是跳过错误,继续执行复制操作(可选)
binlog_format=MIXED #必须制定日志的类型,这里选择混合日志存储,不然无法建立hive表
#重启数据库
service mysqld restart

配置从数据配置文件

1
2
3
4
5
6
7
8
9
10
#Mysql服务的唯一编号 每个mysql服务Id需唯一
server-id=2
read_only=1
#只读模式,可以限定普通用户进行数据修改的操作,但不会限定具有super权限的用户(如超级管理员root用户)的数据修改操作。如果想保证super用户也不能写操作,就可以就需要执行给所有的表加读锁的命令 “flush tables with read lock;”
replicate-do-db=metastore #需要复制的数据库名,如果复制多个数据库,重复设置这个选项即可
replicate-ignore-db=test05 #需要忽略不复制数据库名,如果个数据库,重复设置这个选项即可
replicate-rewrite-db = metastore->apollo # 如果主数据库名字和从数据库名不一样,则使用这个配置,表明将主数据库metastore
#复制到从数据库apollo实例下,和replicate-do-db配置不能共存
#重启数据库
service mysqld restart

设置主数据库复制账号

1
2
3
4
5
6
CREATE USER 'slave'@'%' IDENTIFIED BY 'mysql';
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%';
FLUSH PRIVILEGES;
# 查看赋权状态
use mysql;
select User,authentication_string,Host from user;
  • 查看是否开启日志

    1
    show variables like 'log_bin';
  • 如果开启value值为on

    Variable_name Value
    log_bin ON

查看主节点状态

1
show master status;
  • 结果示例,表示 metastore实例日志文件为mysql-bin.000005,当前日志偏移量为1242284
    File Position Binlog_Do_DB
    mysql-bin.000005 1242284 metastore

操作从数据库

  • 其中change master语句中的master_log_file 为上一步查看的metastore日志文件,master_log_pos为该日志文件的偏移量,
    这样主数据库中的数据发生变化,偏移量就会增长,从数据库根据偏移量去同步数据

    1
    2
    3
    4
    5
    6
    # 停止正在进行的slave(如果有,此方法也用于修改slave的值(如果参数不对))
    stop slave;
    # 需要主机名,上面步骤的账户密码以及日志文件名字和位置(请根据实际情况自行修改)
    change master to master_host='192.168.1.1', master_user='slave', master_password='mysql', master_log_file='mysql-bin.000005', master_log_pos=1242284;
    # 启动
    start slave;
  • 查看状态

    1
    2
    3
    4
    5
    show slave status;
    如果发现Slave_IO_Running和Slave_SQL_Running状态为YES则成功
    Slave_IO_Running负责和主机通讯
    Slave_SQL_Running负者执行从数据库sql语句
    Last_Error复制记录上一次同步出错的出错愿意

遇到的问题

  • 在配置主数据库配置文件时必须指定 binlog_format类型,不然hive建表会出错

  • 配置从数据配置文件时,replicate-do-db=metastore和replicate-rewrite-db不能共存

  • 当同步主数据库的数据到不同名字的从数据库中时,不可直接用Navicat图形化工具去直接操作数据库,应该写语句去执行,不然会导致同步失败

  • 当执行show slave status 查看从节点状态时,发现Slave_IO_Running 一直未connecting,查看mysql错误日志文件(默认在/var/log/mysqld.log)发现Authentication plugin ‘caching_sha2_password’ reported error,从报错可以看出是caching_sha2_password插件的问题执行(将账号和密码替换成自己前面创建复制账号的账号和密码)

1
ALTER USER 'slave'@'%' IDENTIFIED WITH mysql_native_password BY 'mysql';