Mysql 数据同步

 

 

1.本地数据库 同步到远程数据库  (本地 发送到远程服务器)  本地 到远程服务器

表结构 表数据   如果 远程数据库是8.0 需要注意事项:

mysql> select host,user,plugin from mysql.user;


| % | admin_user | mysql_native_password |

需要设置  为 mysql_native_password   不然会存在不兼容问题,

 

命令格式 :

mysqldump -h <local_hostname> -P <local_port> -u <local_username> -p<local_password> <local_database> | mysql -h <remote_hostname> -P <remote_port> -u <remote_username> -p<remote_password> <remote_database>

 

mysqldump -h 118.39.212.205 -P 3306 -u root -pun1ware db_test | mysql -h 123.120.13.28 -P 3306 -u admin_user -pMyNewPass4! --default-auth=mysql_native_password db_test

118.39.212.205 本地数据库  root          本地用户名  远程密码 un1ware  本地数据库db_test 

123.120.13.28  远程数据库   admin_user 远程用户名  远程密码 MyNewPass4!   远程数据库 db_test

 

请将 <local_hostname><local_port><local_username><local_password> 替换为本地数据库的连接信息,

将 <remote_hostname><remote_port><remote_username><remote_password> 替换为远程数据库的连接信息。

确保在 -p 参数后输入本地和远程数据库的密码,并且密码与 -p 直接相连,中间没有空格。

如果你不需要指定本地数据库的连接信息,可以省略本地部分的命令,只提供远程数据库的连接信息。

 

2.本地读取远程数据库  本地下载远程数据库的数据  本地执行,远程到本地

 

mysqldump -h 118.39.212.205 -u root -pun1ware  db_test | mysql -u root -pMyNewPass4! db_test

 

 

 

远程导出数据压缩文件   本地 通过压缩文件进行导入本地数据库  (远程导出,传送到本地,本地在录入数据)

本地导出 db_test 为压缩文件

 mysqldump -uroot -pun1ware --quick db_test | gzip > db_name.gz

通过scp 把本地导出的压缩文件 传送到 远程服务器

 scp -r db_name.gz root@123.120.13.28:/opt

 

远程服务器 执行 导入到本地数据库的命令

 gunzip < db_name.gz | mysql -uroot -pMyNewPass4! db_test

 

dump传输文件,这个表数据比较大适用 

 

问题   mysqldump: Got error: 1290: The MySQL server is running with the --secure-file-priv option so it cannot execute this statement when executing 'SELECT INTO OUTFILE' 

 

查看参数 
mysql> show variables like '%secure%';
+------------------+-----------------------+
| Variable_name | Value |
+------------------+-----------------------+
| secure_auth | ON |
| secure_file_priv | /var/lib/mysql-files/ |
+------------------+-----------------------+

 

导出本地数据库文件到 /var/lib/mysql-files/ 

mysqldump --tab=DUMPDIR db_test -uroot -p --no-tablespaces -T /var/lib/mysql-files/    

--tab=DUMPDIR 会生成两个文件,一个sql 一个txt

 

txt的方式导入   可选参数( --fields-terminated-by=',' )
mysqlimport -h 123.120.13.28 -u admin_user -pMyNewPass4! --local --lines-terminated-by='\n' db_test /var/lib/mysql-files/test.txt

sql的方式导入   不过我这有问题 只导出了表结构 不知道为啥

mysql -h 124.220.13.28 -u admin_user -pMyNewPass4! db_test < /var/lib/mysql-files/test.sql

 

其他的导出sql 结构以及数据的方式 

mysqldump -uroot -p db_test > dump.sql

 

完结,撒花 

 

 

导出优化

在导出大型数据库时,可以采取一些优化措施来提高导出速度。以下是一些可以尝试的优化方法:

  1. 使用--single-transaction选项:在导出过程中,使用--single-transaction选项可以确保使用一致性视图来导出数据,而不会锁定表。这对于大型事务型表格特别有用,可以避免长时间的锁定时间。

    shell复制代码
    mysqldump -uroot -pun1ware --single-transaction --quick db_test | gzip > db_name.gz
  2. 关闭外键约束检查:在导出数据时,可以使用--disable-keys选项关闭外键约束检查。这样可以避免在导出过程中进行多次检查,提高导出速度。

    shell复制代码
    mysqldump -uroot -pun1ware --single-transaction --disable-keys --quick db_test | gzip > db_name.gz
  3. 使用多线程导出:在MySQL 5.7及更高版本中,可以通过使用--threads选项启用多线程导出。这样可以并行导出多个表,提高导出速度。

    shell复制代码
    mysqldump -uroot -pun1ware --single-transaction --quick --threads=4 db_test | gzip > db_name.gz

    --threads=4修改为您希望使用的线程数。

  4. 增加缓冲区大小:通过增加缓冲区大小,可以减少I/O操作次数,提高导出速度。可以使用--max-allowed-packet选项指定缓冲区的大小,例如:

    shell复制代码
    mysqldump -uroot -pun1ware --single-transaction --quick --max-allowed-packet=512M db_test | gzip > db_name.gz

    --max-allowed-packet=512M修改为您希望使用的缓冲区大小。

请注意,这些优化方法适用于大型数据库的导出,具体效果可能因数据库的特性和硬件配置而有所不同。建议根据您的具体情况进行测试和调整,以找到最佳的导出速度和性能组合。

 

 

 

 

 

 

 

相关文档 :https://mysql.net.cn/doc/refman/8.0/en/copying-databases.html

 

 

 

posted @ 2024-01-12 20:10  不会游泳的鱼丶  阅读(34)  评论(0编辑  收藏  举报