MySQL8异构迁移_目录拷贝方式

本文源库和目标库都是采用二进制tar包进行的安装,非rpm和源码编译方式安装。

迁移要求

由于Centos即将停止维护,客户强烈要求操作系统更改成Ubuntu18.04,需将Centos的MySQL迁移至Ubuntu。考虑到数据目录小才1.8G,业务可以停止,随进行了目录拷贝方式实现异构迁移。

OS version

DB version

ip addr

安装方式

源库

Centos7.6 x86_64

MySQL8.0.35

192.168.3.10

二进制tar包

目标库

Ubuntu18.04 x86_64

MySQL8.0.35

192.168.3.20

未安装数据库软件

迁移步骤

迁移前准备(目标库)

系统参数配置

sysctl.conf配置
--备份
cp /etc/sysctl.conf /etc/sysctl.conf_bak_20240119

--添加mysql方面的内容
cat >> /etc/sysctl.conf <<EOF
#add by mysql
#/proc/sys/kernel/优化
# 10000 connect remain:
kernel.sem = 250 162500 250 650	 

#notice: shall shmmax is base on 16GB, you may adjust it for your MEM
#TODO: open blow two paramenter may make error like this: can not fork xxxx, just reboot your computer ~

#for 2GB Mem:
#kernel.shmall = 419430								
#kernel.shmmax = 171796918     

#for 4GB Mem:
#kernel.shmall = 838860								
#kernel.shmmax = 3435973836  

#for 8GB Mem:
#kernel.shmall = 1677721								
#kernel.shmmax = 6871947673  

#for 16GB Mem:
#kernel.shmall = 3774873								
#kernel.shmmax = 8589934592 

#for 32GB Mem:
kernel.shmall = 7549747
kernel.shmmax = 17179869184
#for 64GB Mem:
#kernel.shmall = 15099494
#kernel.shmmax = 34359738368
#for 128GB Mem:
#kernel.shmall = 30198988
#kernel.shmmax = 68719476736
#for 256GB Mem:
#kernel.shmall = 60397977
#kernel.shmmax = 137438953472
#for 512GB Mem:
#kernel.shmall = 120795955
#kernel.shmmax = 274877906944

kernel.shmmni = 4096		

vm.dirty_background_ratio=2 
vm.dirty_ratio = 40			

vm.overcommit_memory = 2	
vm.overcommit_ratio = 90 	

vm.swappiness = 0 				

fs.aio-max-nr = 1048576		
fs.file-max = 6815744		
fs.nr_open = 20480000       

# TCP端口使用范围
net.ipv4.ip_local_port_range = 10000 65000
net.ipv4.tcp_keepalive_time = 1200
net.ipv4.tcp_keepalive_probes = 3
net.ipv4.tcp_keepalive_intvl = 30
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_max_tw_buckets = 6000
# 记录的那些尚未收到客户端确认信息的连接请求的最大值
net.ipv4.tcp_max_syn_backlog = 65536
# 每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目
net.core.somaxconn=1024
net.core.netdev_max_backlog = 32768
net.core.wmem_default = 8388608
net.core.wmem_max = 1048576
net.core.rmem_default = 8388608
net.core.rmem_max = 16777216
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_syn_retries = 2
net.ipv4.route.gc_timeout = 100
net.ipv4.tcp_wmem = 8192 436600 873200
net.ipv4.tcp_rmem  = 32768 436600 873200
net.ipv4.tcp_mem = 94500000 91500000 92700000
net.ipv4.tcp_max_orphans = 3276800
EOF

--生效
sysctl -p 
limits.conf配置
--备份
cp /etc/security/limits.conf /etc/security/limits.conf_bak_20240119

--添加以下内容
cat >> /etc/security/limits.conf << "EOF"
#add by mysql
* soft  nproc   65536
* hard  nproc   65536
* soft  nofile  65536
* hard  nofile  65536
* soft  stack   10240
* hard  stack   32768
* soft core unlimited
* hard core unlimited
EOF
防火墙配置

默认防火墙是关闭状态

sudo ufw disable #禁用

如果启用防火墙需进行如下配置:

如果数据库端口和ssh端口不是3306和22,需视情况更改

sudo ufw enable #开启防火墙
sudo ufw allow 3306/tcp #仅tcp
sudo ufw allow 22/tcp #仅tcp
selinux配置

Ubuntu 默认未安装SELinux,省略设置。

root@HKSZF-ZW-172-19-146-175:/etc/selinux# getenforce
Command 'getenforce' not found, but can be installed with:
apt install selinux-utils

安装依赖包

如果不安装,迁移结束启动数据库会报:error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory

apt-cache search libaio
apt-get install libaio1

创建用户

groupadd mysql
useradd -r -g mysql -s /bin/false mysql

创建目录

su - root
mkdir -p /mysqldb

停止数据库(源库)

--查看源库进程,确定安装目录和配置文件
[root@localhost log8]# ps -ef | grep mysql
mysql      2232      1  9 11:19 ?        00:00:07 /mysqldb/mysql8/bin/mysqld --defaults-file=/mysqldb/my8.cnf

配置文件位置:/mysqldb/my8.cnf

--查看安装目录和数据目录位置
[root@localhost ~]# cat /mysqldb/my8.cnf | grep basedir
basedir=/mysqldb/mysql8  #mysql安装根目录
[root@localhost ~]# cat /mysqldb/my8.cnf | grep datadir
datadir=/mysqldb/data8 #mysql数据文件所在目录

--停止源数据库
systemctl stop mysqld
systemctl disable mysqld
systemctl status mysqld

系统服务文件位置:/usr/lib/systemd/system/mysqld.service

文件传输(源库到目标库)

文件传输包含以下文件:

  • 安装目录
  • 数据目录
  • 配置文件
  • 系统服务文件

我这儿是采用tar包二进制安装到了一个目录,如果目录是分开的请注意分开传输

--含安装目录+数据目录+配置文件传输
scp -r /mysqldb root@192.168.40.190:/

--系统服务文件传输
scp /usr/lib/systemd/system/mysqld.service root@192.168.40.190:/lib/systemd/system/

权限配置(新库)

chown -R mysql:mysql /mysqldb
chmod -R 755 /mysqldb

系统服务文件配置

--配置系统服务链接
ln -s /lib/systemd/system/mysqld.service  /etc/systemd/system/mysqld.service
chmod +x /lib/systemd/system/mysqld.service

如果源库目录和新库目录一致,无需更改系统服务文件里的安装位置和配置文件位置,不然需要更改系统服务文件里的安装位置和配置文件位置即ExecStart=/mysqldb/mysql8/bin/mysqld --defaults-file=/mysqldb/my8.cnf

root@ubuntu:~# cat /etc/systemd/system/mysqld.service
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target

[Install]
WantedBy=multi-user.target

[Service]
User=mysql
Group=mysql
ExecStart=/mysqldb/mysql8/bin/mysqld --defaults-file=/mysqldb/my8.cnf
LimitNOFILE=65536  
LimitNPROC=65536

启动数据库(目标库)

--启动数据库(目标库)
systemctl start mysqld
systemctl status mysqld

--配置数据库开机自启
systemctl enable mysqld

配置环境变量

su - root
--备份源环境变量
cp .bashrc .bashrc_bak_20240119

--更改环境变量文件
vi .bashrc
末尾增加
export PATH=$PATH:/mysqldb/mysql8/bin

配置sock文件软链接

--查找sock文件位置
root@ubuntu:~# cat /mysqldb/my8.cnf | grep mysql.sock
socket = /mysqldb/mysql.sock
socket = /mysqldb/mysql.sock
socket = /mysqldb/mysql.sock

root@ubuntu:~# ls -l /mysqldb/mysql.sock
-rwxrwxrwx 1 mysql mysql 0 Jan 19 11:45 /mysqldb/mysql.sock

--配置软链接,不然登录提示Command 'mysql' not found
root@ubuntu:~# ln -s /mysqldb/mysql.sock /tmp/mysql.sock

语法:ln -s 源文件位置  软链接位置   
注意:源文件位置:必须使用绝对路径不然无效

登录数据库

配置环境变量后新开一窗口登录数据库。

root@ubuntu:/mysqldb# mysql -uroot -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 11
Server version: 8.0.35 MySQL Community Server - GPL

Copyright (c) 2000, 2023, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

迁移成功。

问题处理

启库失败error while loading shared libraries: libaio.so.1

问题描述

root@ubuntu:~# systemctl status mysqld
Jan 19 11:42:23 ubuntu mysqld[1805]: /mysqldb/mysql8/bin/mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory

解决办法

安装依赖包,注意centos下是安装libaio,Ubuntu下是安装libaio1。

apt-cache search libaio
apt-get install libaio1

安装后启库成功。

登录数据库提示Command 'mysql' not found

问题描述

迁移结束后,服务运行正常,但是登录提示Command 'mysql' not found, but can be installed with:

root@ubuntu:~# mysql -uroot -p
Command 'mysql' not found, but can be installed with:
apt install mysql-client-core-5.7   
apt install mariadb-client-core-10.1

千万不要被提示误导进行安装mysql-client-core-5.7 和mariadb-client-core-10.1

解决办法

配置环境变量

su - root
--备份源环境变量
cp .bashrc .bashrc_bak_20240119

--更改环境变量文件
vi .bashrc
末尾增加
export PATH=$PATH:/mysqldb/mysql8/bin

配置环境变量后,新开一窗口登录即可成功登录

参考链接:

启库报错链接:https://www.cnblogs.com/hufulinblog/p/10124001.html

配置环境变量链接:Ubuntu18.0.4设置、查看环境变量_ubuntu 18.04 export-CSDN博客

配置系统服务链接:https://www.cnblogs.com/zoujiaojiao/p/13885884.html#:~:text=Ubuntu-18%20%E5%BC%80%E6%9C%BA%E8%87%AA%E5%8A%A8%E5%90%AF%E5%8A%A8%E8%87%AA%E5%AE%9A%E4%B9%89%E7%A8%8B%E5%BA%8F%201%201.%E5%AE%9E%E7%8E%B0%E5%8E%9F%E7%90%86%20systemd%20%E9%BB%98%E8%AE%A4%E4%BC%9A%E8%AF%BB%E5%8F%96%20%2Fetc%2Fsystemd%2Fsystem%20%E4%B8%8B%E7%9A%84%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6%EF%BC%8C%E8%AF%A5%E7%9B%AE%E5%BD%95%E4%B8%8B%E7%9A%84%E6%96%87%E4%BB%B6%E4%BC%9A%E9%93%BE%E6%8E%A5,%E5%8A%A0%E4%B8%8A%E6%9D%83%E9%99%90%EF%BC%8C%E5%90%AF%E7%94%A8%E6%9C%8D%E5%8A%A1%20...%205%205.%E5%90%AF%E5%8A%A8%E6%9C%8D%E5%8A%A1%E5%B9%B6%E6%A3%80%E6%9F%A5%E7%8A%B6%E6%80%81%20...%206%206.%E8%87%AA%E5%AE%9A%E4%B9%89%E8%84%9A%E6%9C%AC%EF%BC%8C%E5%B9%B6%E7%BB%99%E8%B6%B3%E5%A4%9F%E6%9D%83%E9%99%90%EF%BC%9A%20%E6%9B%B4%E5%A4%9A%E9%A1%B9%E7%9B%AE

  • 15
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
mysql异构数据迁移是指将数据从一个MySQL数据库迁移到另一个MySQL数据库,但两个数据库可能存在一些异构问题,例如表结构不一致和数据差异等。解决这些异构问题的方法有以下几种: 1. 在登录mysq客户端时加上local-infile参数,例如:$ mysql -u root -p --local-infile。这个参数允许在数据迁移过程中使用LOAD DATA INFILE命令导入数据,从而解决了数据差异的问题。 2. 使用source命令导入SQL文件。例如:mysql> source /opt/sequoiasql/mysql/test/test.sql。这样可以自动创建表结构,解决了表结构不一致的问题。 需要注意的是,异构数据库迁移还可能涉及到其他问题,如库、表、列映射、裁剪和数据过滤等。在解决这些问题时,可以根据具体的业务需求进行相应的处理。例如,可以使用CloudCanal等工具来简化数据迁移的过程。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [MySQL数据迁移](https://blog.csdn.net/baidu_16083471/article/details/89644396)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [5分钟搞定 MySQLMySQL异构“数据在线迁移同步](https://blog.csdn.net/u012604101/article/details/119324714)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

福娃筱欢

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值