您的位置:首页 > 数据库 > MariaDB

mariadb数据库集群 故障处理 及 数据导入导出(含mysql)

2020-08-28 16:27 1021 查看

mariadb集群崩溃

3台数据库的集群(版本为mariadb10.3.8),有一台服务器down,另外两台就无法工作了— 脑裂了!:
WSREP has not yet prepared node for application use
因为必须3台才能形成一个集群,否则不能工作
(注:2台是可以集群的,但极易发生脑裂!);脑裂后那台down的机器启动了,启动mysql也进入不了集群,为了能让服务器先工作起来,必须停止故障集群!先把其中还可以连接的一台服务器,执行sql:
SET GLOBAL wsrep_provider_options=‘pc.bootstrap=YES’;
这样让它就脱离了集群,独立运作;其他的服务器关闭;

启动崩溃的集群

解决方法一:

第1步、删除garlera群主主机的/var/lib/mysql/grastate.dat状态文件
mysqld --wsrep-new-cluster启动服务。启动正常。登录并查看wsrep状态。
第2步:删除galera成员主机中的/var/lib/mysql/grastate.dat状态文件
systemctl restart mariadb重启服务。启动正常。登录并查看wsrep状态。

解决方法二:

第1步、修改garlera群主主机的/var/lib/mysql/grastate.dat状态文件中的0为1
mysqld --wsrep-new-cluster启动服务。启动正常后登录并查看wsrep状态。
第2步:修改galera成员主机中的/var/lib/mysql/grastate.dat状态文件中的0为1
systemctl restart mariadb重启服务。启动正常。登录并查看wsrep状态。

解决方法三:

不愿删改文件,也可直接在第一台节点上执行:
mysqld --defaults-file=/etc/my.cnf.d/server.cnf --user=mysql --wsrep-new-cluster --wsrep-cluster-address="gcomm://"
或者 使用启动命令:service mysql start --wsrep-new-cluster --wsrep-cluster-address="gcomm://"
而后启动其他的服务器,直接使用 service mysql start

启动节点出现失败

查看错误信息:

–1)、发现有tc.log的错误,于是,删除data目录下的 tc.log,重启服务

–2)、没有发现日志有明确的出错,但是数据库就是无法启动(从节点),有时又报错,如Unknown error 255、Failed to prepare for incremental state transfer: Local state UUID (00000000-0000-0000-0000-000000000000) does not match group state UUID 等,删除 grastate.dat、galera.cache,启动服务

–3)、对数据库的数据量比较大时,经常出现time out的错误,使得服务无法启动则需要:
vi /usr/lib/systemd/system/mariadb.service
在service中添加超时时间的设置

[Service]
TimeoutStartSec=12min

而后 systemctl daemon-reload,再启动服务

–4)、问题依旧… ,发现selinux启动了,关闭之 (需确保关闭selinux,否则会出各种问题,莫名其妙的)

–5)、还有莫名奇妙的问题,yum update MariaDB* (必须是更高版本或相同版本去加入已有集群!!)

关于IP

启动其他服务器,记得必须mysql配置文件下配好所有服务器的ip:
。。。
wsrep_cluster_address=“gcomm://10.28.11.69,10.28.11.70,10.28.11.73”
。。。

修改文件后 /etc/init.d/mysql start
不修改配置文件,直接也可以service mysql start --wsrep-cluster-address=“gcomm://10.28.11.69”
或 /etc/init.d/mysql start --wsrep-cluster-address=“gcomm://10.28.11.69”
(注:后面两个方法里写的地址是集群中某个可用节点的ip)

特别记录

最要命的问题是:如果集群的数据非常的大。。。,反正我是没有办法再次让集群启动了,不是rsync同步错误就是操作超时或者是innodb表空间丢失、数据节点不正确…,各种错误林林总总,我是一点办法没有了;最后是重新建立一个新集群,而后重新导入数据,如果你的集群数据特别大无法直接启动了,那建议的做法是,重做个空数据的集群,用原来那个已无法使用的集群中可用节点的数据导入新集群,这还是最简便的办法

(!!对于最后始终无法加入集群的节点,我采用的方法是 直接tar打包已经正常加入集群的节点的数据库数据目录,在新节点解包,而后启动服务器!! 注意:打包恢复必须确保打包后备份的集群数据不能有新变化,否则一样启动不了的!!)

数据恢复

mariadbbackup
备份全库数据(target-dir 是备份的数据文件目录):
mariabackup --backup --target-dir /data/mysqlbak --user username --password userpassword
在备份的数据集目录进行初始化操作:(默认调用my.cnf,这时的数据库的数据目录应为空)
mariabackup --prepare --target-dir /data/mysqlbak
进行数据的恢复:(这里用复制,如果是不需保留备份数据就用 move-back)
mariabackup --copy-back --target-dir /data/mysqlbak
完成后,需要把数据库的数据目录文件的属主修改过来,要不数据库是无法启动的:
chown -R mysql:mysql /var/lib/mysql

纯文本数据操作 (大批量数据最好用纯文本方式导入,这样的效率最高)
进入mysql导出文本文件,用默认格式( 字符集这些 在my.cnf需设置好 )
mysql> SELECT * FROM tablename INTO OUTFILE ‘file’;
mysql > LOAD DATA INFILE ‘file’ INTO TABLE tablename;
需注意数据内容如果包含分隔符号是无法正确导入的(这时需要自定义相关符号),这点必须谨慎!!

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐