当前位置:首页 > 服务器系统 > Centos > 正文内容

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

一二三5年前 (2020-11-30)Centos922
1、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';
这样让它就脱离了集群,独立运作;其他的服务器关闭;

2、要启动集群,
解决方法一:
第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* (必须是更高版本或相同版本去加入已有集群!!)

3、启动其他服务器,记得必须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)

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

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

5、数据恢复~~~~~
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;
需注意数据内容如果包含分隔符号是无法正确导入的(这时需要自定义相关符号),这点必须谨慎!!


扫描二维码至手机访问

扫描二维码推送至手机访问。

版权声明:本文由一二三博客发布,如需转载请注明出处。

标签: mariadb
分享给朋友:

相关文章

Centos7 mariadb 10.5集群式部署常见故障处理

Centos7 mariadb 10.5集群式部署常见故障处理

1、It may not be safe to bootstrap the cluster from this node. It was not the last one一、故障现象查看mysql错误...

Centos 扩展磁盘大小实战 Linux 磁盘分区扩容

yum install cloud-utils-growpart yum install xfsprogs LANG=en_US.UTF-8 growpa...

MYSQL 查看最大连接数和修改最大连接数

MySQL查看最大连接数和修改最大连接数1、查看最大连接数show variables like '%max_connections%';2、修改最大连接数set GLOBAL max...

Centos7 防火墙(firewall)常用操作

防火墙操作查看防火墙状态启动: systemctl start firewalld查看状态: systemctl status firewalld 停止:  systemctl s...

CentOS查找文件内容命令

grep -rn "内容" /目录...

MySQL数据库的数据备份和恢复(导入和导出)命令操作语法

1、mysql导出数据库命令mysqldump -h[主机所在IP] -u[用户名] -p [要导出的数据库]>[导出的路径//[文件名].sql]1)mysqldump字符集设置mysqldu...