MySQL数据同步问题
目前是要从另一个其他项目库里查询数据清洗后插入到我们项目库,是全量同步,要做到一直有数据,先删除再插入怕有空档期,有什么好的解决方法吗?目前有建议是创捷Mysql临时表。
该回答引用GPTᴼᴾᴱᴺᴬᴵ
对于全量同步的情况,建议可以使用 MySQL 的数据导出和导入功能。具体步骤如下:
1.在源数据库中使用 SELECT 语句查询需要同步的数据,并将查询结果导出为 CSV 文件。可以使用 MySQL 自带的 SELECT INTO OUTFILE 语句将查询结果导出为 CSV 文件,例如:
SELECT name, size INTO OUTFILE '/path/to/data.csv' FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' FROM your_table;
这将会将 your_table 表中的 name 和 size 字段的数据导出到 /path/to/data.csv 文件中,每行数据使用逗号分隔,行结束符为换行符。
2.将导出的 CSV 文件传输到目标数据库所在的服务器上。
3.在目标数据库中创建一个临时表,用于存放从 CSV 文件中导入的数据,例如:
CREATE TEMPORARY TABLE temp_data (name VARCHAR(255), size INT);
4.使用 MySQL 自带的 LOAD DATA INFILE 语句将 CSV 文件中的数据导入到临时表中,例如:
LOAD DATA INFILE '/path/to/data.csv' INTO TABLE temp_data FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' (name, size);
这将会将 /path/to/data.csv 文件中的数据导入到 temp_data 表中。
5.将临时表中的数据插入到目标表中,并删除临时表,例如:
INSERT INTO your_table (name, size) SELECT name, size FROM temp_data;
DROP TEMPORARY TABLE temp_data;
这将会将 temp_data 表中的数据插入到 your_table 表中,并删除 temp_data 表。
这种方法可以在导入数据时避免删除目标表中的数据,同时也可以保证导入数据的连续性,避免了空档期的出现。
不知道你这个问题是否已经解决, 如果还没有解决的话:前面我们介绍了半同步复制,这里我们讲解全同步复制,它与半同步复制的区别是半同步是只要一个节点确定接收到ack信号就可以,而全同步需要等待所有节点都确定接收到ack信号后才会执行下一步。
实现全同步的步骤:
systemctl stop mysqld ##先将主从节点主机的mysql先关闭
清除了以前的数据,现在这是全新的mysql。
因为忘记获取uuid就把数据删了,现在我们先暂时开启一下Mysql
vim /etc/my.cnf ##在主节点中编辑配置文件
vim /etc/my.cnf ##编辑slave从节点的配置文件
然后保存退出,再进行Mysql的初始化
现在加入数据进行测试:
接下来加入俩个节点。
vim /etc/my.cnf ##编辑server3的配置文件
grep password /var/log/mysqld.log
其实组复制是不分主节点和从节点的,没有一个主机都有可能成为master