导出时表锁的情况,会卡住导出进程:
- https://blog.csdn.net/demonson/article/details/87936096
- https://blog.csdn.net/u013810234/article/details/105978479
默认导出为一条 sql,数据都拼接到括号里面,并且不指定字段:
- —skip-extended-insert:多条 insert 语句
mysqldump -ufactory -padmin123 -t factory --skip-extended-insert --tables t_user, t_a > factory.sql
mysqldump:
```bash安装客户端
yum -y install mysql-client
或者单独安装 mysqldump
yum -y install holland-mysqldump.noarch
<a name="iYRfS"></a>
### 备份:
```bash
# 备份整个数据库
mysqldump -h 10.108.137.38 -uroot -ptest --single-transaction --all-databases --flush-privileges > bak-all.sql
# 跳过某些库:mysql、information_schema、performance_schema、my_database、test
mysqldump -h 10.108.137.38 -uroot -ptest --single-transaction --all-databases --ignore-database=mysql --ignore-database=information_schema --ignore-database=performance_schema --ignore-database=my_database --ignore-database=test > bak-all.sql
# 好像没效果:--flush-privileges
# 备份某个表
mysqldump -h 10.108.137.38 -uroot -ptest test t_test1 > bak-all.sql
导入:
mysql -h 10.108.137.39 -uroot -ptest < bak-all.sql
# 导入完成后,刷新权限
mysql -h 10.108.137.39 -uroot -ptest -e 'FLUSH PRIVILEGES;'
# 查看用户是否有被同步过来
mysql -h 10.108.137.39 -uroot -ptest -e 'select * from mysql.user;'
k8s mariadb 备份步骤:
1、新建一个 mariadb 集群,注意密码要和原集群的一样(在 values.yaml 中指定)
2、使用 mysqldump 将原始机器的数据备份到文件。对比一下看看数据库的个数是否一致。
2k 个数据库,导出大概半个小时
egrep 'CRREATE DATABASE' bak-all.sql | wc -l
mysql -h 10.108.137.39 -uroot -ptest -e 'show databases;' | wc -l
3、使用 mysql 导入 sql 到新集群。可以查看新集群的数据库个数来查看大概进度
2k 个数据库,导入大概2-3个小时
mysql -h 10.108.137.40 -uroot -ptest -e 'show databases;' | wc -l
4、尝试使用原有的其他用户登录新数据库,判断账号权限信息是否有被同步过来。
没有的话可能需要再执行以下FLUSH PRIVILEGES
5、重启数据库,重新进入看看有没有问题。(保证重启后的状态是和恢复后的一致的)
6、切换 svc。将原来的 svc 改名,换 IP,如果有 NodePort 也需要换端口。
svc 的 IP 是不允许修改的,可以直接将 svc 导出为 Yaml,然后删除重建。
然后将新的 svc 改成原来的 IP 和名称
重启后出现问题:远程连接失败,只能本地连接
- 解决:创建新用户,先本地连接,再尝试远程连接。突然就能恢复了
再次重启后还会失效,只能再次执行一遍:
create user zlj;
GRANT ALL PRIVILEGES ON *.* TO zlj@"%" IDENTIFIED BY 'zlj' WITH GRANT OPTION;
flush privileges;
迁移用户:
https://zhuanlan.zhihu.com/p/349231526
# 获取所有用户
mysql -B -N -h 10.108.137.38 -uroot -padmin -e "SELECT CONCAT('\'', user,'\'@\'', host, '\'') FROM mysql.user WHERE user!=''" > a.txt
# 根据用户获取对应的权限和密码
while read line; do mysql -B -N -h 10.108.137.38 -uroot -padmin -e "SHOW GRANTS FOR $line"; done < a.txt > a.sql
# 每一行追加分号
sed -i 's/$/;/' a.sql
echo "flush privileges;" >> a.sql
# 导入目标库
mysql -B -N -h 10.108.137.38 -uroot -padmin -e "source a.sql;"
网络问题:
从 master01 ssh 到 worker02/worker09 很慢。
mariadb 时常重启:
# 将存活探针的 timeout 由 1s 加到 10s
# 失败重启的阈值也可以调大点
livenessProbe:
timeoutSeconds: 10
failureThreshold: 3
# 就绪探针也可以配置一下
readinessProbe:
timeoutSeconds: 10
failureThreshold: 3