服务器Mysql数据库迁移
因公司云服务器即将到期并准备更换与平台,所以对云服务器数据库做迁移。
准备工具
- Docker
- Navicat
迁移思路
- 新旧数据库同步,保证迁移过程中在不影响服务的情况下将新增的数据及时添加到新数据库。
- 旧数据备份,预防迁移旧数据过程中出现意外。
- 迁移旧数据,将旧数据库中的数据整体迁移到新数据库并切换服务。
原数据库信息记录
-
原数据库:120.79.1XX.XX(果园服务器)
-
端口:1234
-
用户名:root
-
密码:9ApHXXXXX
-
需要迁移的库:
- orchard_hc
- orchard_prod
- orchard_yudu
- orchard_test
- nangfeng_orchard
新数据库创建及配置
- 新数据库:122.9.1XX.XXX (Yufeng-DB1)
- 端口:1234
$ docker load < mysql-5.7.tar # 本地进行,无本地则docker pull mysql:5.7
$ mkdir -p /opt/software/mysql/GuoyuanDB/conf
$ mkdir -p /opt/software/mysql/GuoyuanDB/data
$ mkdir -p /opt/software/mysql/GuoyuanDB/logs
$ vim /opt/software/mysql/GuoyuanDB/conf/my.cnf # 下方文件为基础内容,innodb优化等内容自行配置。
$ docker run -d -p 1234:3306 --privileged=true -v /opt/software/mysql/GuoyuanDB/logs:/var/log/mysql -v /opt/software/mysql/GuoyuanDB/data:/var/lib/mysql -v /opt/software/mysql/GuoyuanDB/conf:/etc/mysql -e MYSQL_ROOT_PASSWORD=helloword --name GuoyuanDB mysql:5.7
$ docker ps -a # 检查容器是否启动
$ docker logs GuoyuanDB # 若未成功启动查看日志
my.cnf
#############################################
[mysqld]
port=3306
# server_id,本容器为主数据库
server_id=101
# 开启二级制日志功能
log-bin=maill-mysql-bin
# 设置二进制日志使用内存大小(事务)
binlog_cache_size=5M
# 设置使用的二进制日志格式(mixed, statement, row)
binlog_format=mixed
## 二进制日志过期清理时间。默认值为0;表示不自动清理。
# expire_logs_days=7
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062
# 支持联合查询
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
################################################
新旧数据库结构与表同步
-
使用Navicat工具,连接新数据库。
连接不上就检查服务器是否开放连接ip和1234端口。
-
使用Navicat新建需要迁移的5个同名库。
-
工具 --> 结构同步 :选择同名库,进行表结构同步。
新旧数据库同步配置
- 服务器登录主数据库,创建同步账号并授权。
# 原数据库确保开启二进制日志后,创建同步账号并授权
$ mysql -u root -p
create user 'db1'@'122.9.1XX.XXX' identified by '123';
grant replication slave, replication client on *.* to 'db1'@'122.9.1XX.XXX';
flush privileges;
show master status;
# 记录同步开始文件及位置
file:mysql-bin.000072
positions:408
- 服务器登录从数据库,选择master并开始同步
change master to
master_host='120.79.1XX.XX',
master_port=1234,
master_user='db1',
master_password='123',
MASTER_LOG_FILE='mysql-bin.000072',
MASTER_LOG_POS=408;
start slave;
show slave status \G;
# Slave_IO_Running:Yes
# Slave_SQL_Running:Yes
# 这两个状态为YES为配置成功
过程中出现Slave_IO_Running:No的问题:
检查后为原服务器未对新服务器ip添加白名单,开放后成功同步。
原数据库数据备份
$ mysqldump -uroot -p9ApHXXXXX --databases nangfeng_orchard orchard_test orchard_hc orchard_prod orchard_yudu > /data/db_backup/bak.sql
数据迁移
Navicat : 工具 --> 数据传输
选择相同的两个库,进行数据传输,完成迁移。