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
完结,撒花
导出优化
在导出大型数据库时,可以采取一些优化措施来提高导出速度。以下是一些可以尝试的优化方法:
-
使用
--single-transaction
选项:在导出过程中,使用--single-transaction
选项可以确保使用一致性视图来导出数据,而不会锁定表。这对于大型事务型表格特别有用,可以避免长时间的锁定时间。shell复制代码mysqldump -uroot -pun1ware --single-transaction --quick db_test | gzip > db_name.gz
-
关闭外键约束检查:在导出数据时,可以使用
--disable-keys
选项关闭外键约束检查。这样可以避免在导出过程中进行多次检查,提高导出速度。shell复制代码mysqldump -uroot -pun1ware --single-transaction --disable-keys --quick db_test | gzip > db_name.gz
-
使用多线程导出:在MySQL 5.7及更高版本中,可以通过使用
--threads
选项启用多线程导出。这样可以并行导出多个表,提高导出速度。shell复制代码mysqldump -uroot -pun1ware --single-transaction --quick --threads=4 db_test | gzip > db_name.gz
将
--threads=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