需求如下:由于业务需要,要求将A库中的member表,每分钟同步到B库。以实现B库中的数据更新速度略慢于访问A库。

假设这2个数据库配置如下:

数据库名称|主机/IP|用户名|密码|端口
:--:|:--:|--|:--:|:
A|100.00.0.001|root|mima01|3306
B|xx.sql.tencentcdb.com|lucas|mima02|64388

一、mysqldump + sh脚本完成

# 1、创建 member.sql 文件,并赋上可写权限
touch member.sql
chmod 775 member.sql
# 2、创建 syn.sh 文件
touch syn.sh
# 3、将A库中的test_a表备份出来,导出到member.sql文件中
mysqldump -uroot --host=100.00.0.001 --port=3306 A member --password=mima01 --set-gtid-purged=off -f > /member.sql
# 4、将导出的member.sql文件导入到B库中
mysql -ulucas --host=xx.sql.tencentcdb.com --port=64388 B --password=mima02 -f < /member.sql
# 5、执行sh脚本
sh syn.sh
# 6、写一个每分钟执行一次的定时任务

提示:mysqldump 简单用法如下,详细用法点此查看

# 导出全部数据库。 --all-databases  , -A
mysqldump -uroot -p --all-databases

# 显示帮助信息并退出。 --help
mysqldump --help

# 在导出过程中忽略出现的SQL错误。 --force
mysqldump -uroot -p --all-databases --force

# 需要导出的主机信息。 --host, -h
mysqldump -uroot -p --host=localhost --all-databases

# 连接数据库密码。 --password, -p
mysqldump -uroot -p --host=localhost --all-databases --password=demopassword

# 指定连接的用户名。 --user, -u
mysqldump --user=demouser

二、可能的错误及解决方案

1、报错:command not found

syn.sh: line 2: $'\r': command not found

解决方法:修改syn.sh的文件格式 set ff=unix配置。

2、报错如下:only be set when @@GLOBAL.GTID_MODE = ON.

ERROR 1839 (HY000) at line 24: @@GLOBAL.GTID_PURGED can only be set when @@GLOBAL.GTID_MODE = ON.

解决方法:在使用mysqldump备份sql的时候,加上 --set-gtid-purged=off配置,在导入表的时候加上 -f强制执行。

3、报错如下:using password: YES

ERROR 1045 (28000): Access denied for user 'lucas'@'115.159.36.155' (using password: YES)

解决方法:账号密码错误。

4、报错如下:you need (at least one of) the SUPER privilege

ERROR 1227 (42000) at line 18: Access denied; you need (at least one of) the SUPER privilege(s) for this operation

解决方法:切换成root账户。

三、关于mysql写操作不断生成bin日志造成磁盘爆满的解决方案

1、配置my.conf禁止生成bin日志

# 编辑/etc/my.conf文件
vim /etc/my.conf
# 将log-bin=mysql-bin注释掉
#log-bin=mysql-bin
# 重启mysql
service mysqld restart

65c187fc7f8deb3c78c80816bb6d26.png

提示:磁盘爆满可以通过以下命令删除mysql-bin日志

# 进入到目录
cd /www/server/data
# 查看
ls

8939090410f3295b2b14693354f1bc.png

# 找到相关日志,并删除
find . -maxdepth 1  -regex ".*mysql-bin.000.*" | xargs rm -rf
最后修改:2024 年 10 月 29 日
如果觉得我的文章对你有用,请随意赞赏