服务器迁移记录
[文章作者:磨延城 转载请注明原文出处:
https://mo2g.com/view/158/
]
前段时间阿里云的服务器到期,就把博客迁移到新的服务器上,系统也升级到了 Centos 8.新服务器的内存有 2G 是以前的两倍,所以采用了 Podamn(docker 的替代品)来部署环境,以后再迁移也方便了.
前段时间阿里云的服务器到期,就把博客迁移到新的服务器上,系统也升级到了 Centos 8。新服务器的内存有 2G 是以前的两倍,所以采用了 Podamn(docker 的替代品)来部署环境,以后再迁移也方便了。
本文记录大致的迁移过程,陆续更新,也可以当作一个参考。
## 运行环境如下
```
Nginx
PHP 8 (自定义镜像)
Xunsearch (自定义镜像)
Mysql 8
```
以前习惯基于Cetons编译镜像,现在改成alpine,发现确实好用。
## Mysql 常用的备份工具介绍
1. mysqldump 是官方的 Mysql 逻辑备份上古神器,单线程。
2. mydumper 是 Maxbube 开源的 Mysql 逻辑备份神器,多线程。
3. xtrabackup 是 Percona 开源的 Mysql 物理备份神器,多线程。
全库备份优先考虑使用 xtrabackup,非全库备份优先考虑使用 mydumper。
## 新旧服务器 - 安装 percona-xtrabackup
```
yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm
## 旧版 mysql 使用
yum install percona-xtrabackup
## 支持 mysql 5.7.x
yum install percona-xtrabackup-24
## 只支持 mysql8.0以上版本
yum install percona-xtrabackup-80
## 解压依赖
yum install qpress
```
## 旧服务器 - 创建同步用户
先创建一个用于内网同步的用户,如果已有则可跳过此步骤。
```
create user 'mo_rep'@'168.8.88.%' identified by '888888';
grant replication slave on *.* to 'mo_rep'@'168.8.88.%';
flush privileges;
```
## 旧服务器 - 导出 mysql 数据到硬盘
xtrabackup 会自动把 binglog pos 记录到 xtrabackup_info 中,如果要做主从同步会用得到。
```
time xtrabackup --defaults-file=/etc/my.cnf --socket=/var/lib/mysql/mysql.sock --backup --user=root --password='888888' --parallel=1 --stream=xbstream --compress --compress-threads=1 /data/xtrabackup > /data/xtrabackup/mo2g.xbstream
```
## 旧服务器 - 传输数据到新服务器
20G 传输预计需要同步 2:15:25,传输速率大概是 2.8M/s,可能是小文件比较多,仅供参考。
```
rsync --progress -avz -e 'ssh -p 22 -i key' /data/* root@168.8.88.188:/data
```
## 新服务器 - 安装 mysql
在这一步新服务器只需要安装 Mysql,先不要启动,也不需要配置密码,数据还原成功会恢复原有数据库的所有用户。
```
yum install mysql-server
systemctl enable mysqld
# 相关命令参考
systemctl daemon-reload
grep 'temporary password' /var/log/mysqld.log
mysql -uroot -p
ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass';
flush privileges;
```
## 新服务器 - 解压数据
```
time xbstream -x < /data/xtrabackup/mo2g.xbstream -C /data/xtrabackup/
xtrabackup --decompress --target-dir=/data/xtrabackup/
```
## 新服务器 - 预处理数据
为了保证数据文件的一致性,参数 --prepare ,执行了以下操作
1. 回滚未提交的事务
2. 同步已经提交的事务
```
xtrabackup --prepare --target-dir=/data/xtrabackup/
```
## 新服务器 - 导入数据
```
xtrabackup --defaults-file=/etc/my.cnf --move-back --target-dir=/data/xtrabackup/
```
## 新服务器 - 启动 Mysql
```
chown mysql\: /var/lib/mysql -R
systemctl start mysqld
```
## 新服务器 - 查看 xtrabackup_info,获取 binlog_pos 参数
```
cat xtrabackup_info
uuid = a2297c94-0fed-11ec-8454-00163e0e524d
name =
tool_name = xtrabackup
tool_command = --defaults-file=/etc/my.cnf --socket=/var/lib/mysql/mysql.sock --backup --user=root --password=... --parallel=1 --stream=xbstream --compress --target-dir=/data/xtrabackup
tool_version = 8.0.26-18
ibbackup_version = 8.0.26-18
server_version = 8.0.21
start_time = 2021-09-07 23:09:21
end_time = 2021-09-07 23:09:44
lock_time = 6
binlog_pos = filename 'binlog.000180', position '156'
innodb_from_lsn = 0
innodb_to_lsn = 1597965138
partial = N
incremental = N
format = xbstream
compressed = compressed
encrypted = N
```
## 新服务器 - 配置 mysql 主从同步
```
# 用旧服务器的用户登录 mysql
mysql -h 127.0.0.1 -p
# 查看只读配置
SHOW VARIABLES LIKE '%read_only%';
SET GLOBAL read_only = 1;
# 配置同步参数
change master to master_host='168.8.88.168',
master_port=3306,
master_user='mo_rep',
master_password='888888',
master_log_file='binlog.000180',
master_log_pos=156;
# 开始同步
start slave;
# 查看同步状态
show slave status\G;
```
### 主从同步可能遇到的问题
如果报错如下错误
```
ERROR 1872 (HY000): Slave failed to initialize relay log info structure from the repository
```
1. 先记录 binlog_pos 参数
2. 重置同步配置
3. 再重新配置同步参数
```
# 重置同步配置
reset slave;
show slave status\G;
```
评论:
我来说两句: