迁移Linux MariaDB数据可以通过多种方式进行,以下是一些常见的方法:
mysqldump
工具备份数据库
使用mysqldump
命令备份整个数据库或特定数据库。
mysqldump -u username -p database_name > backup.sql
或者备份所有数据库:
mysqldump -u username -p --all-databases > all_databases.sql
传输备份文件 将生成的SQL文件传输到目标服务器。
scp backup.sql user@target_server:/path/to/destination/
恢复数据库
在目标服务器上使用mysql
命令恢复数据库。
mysql -u username -p database_name < /path/to/destination/backup.sql
rsync
进行文件复制停止MariaDB服务 在源服务器上停止MariaDB服务以确保数据一致性。
sudo systemctl stop mariadb
复制数据目录
使用rsync
命令复制MariaDB的数据目录到目标服务器。
sudo rsync -avz /var/lib/mysql/ user@target_server:/var/lib/mysql/
修改权限 确保目标服务器上的MySQL用户对数据目录有适当的权限。
sudo chown -R mysql:mysql /var/lib/mysql/
启动MariaDB服务 在目标服务器上启动MariaDB服务。
sudo systemctl start mariadb
如果源服务器和目标服务器都使用LVM(逻辑卷管理),可以利用LVM快照进行迁移。
创建快照 在源服务器上创建LVM快照。
sudo lvcreate --size 10G --snapshot --name mariadb_snapshot /dev/vg_name/lv_name
挂载快照 挂载快照到一个临时目录。
sudo mount /dev/vg_name/mariadb_snapshot /mnt/snapshot
复制数据 将快照中的数据复制到目标服务器。
sudo rsync -avz /mnt/snapshot/ user@target_server:/path/to/destination/
删除快照 复制完成后删除快照。
sudo umount /mnt/snapshot
sudo lvremove /dev/vg_name/mariadb_snapshot
如果需要在两台服务器之间实时同步数据,可以使用MariaDB的复制功能。
配置主服务器
在源服务器上配置my.cnf
文件,启用二进制日志并设置唯一的服务器ID。
[mysqld]
server-id = 1
log_bin = /var/log/mysql/mysql-bin.log
创建复制用户 创建一个用于复制的用户并授予权限。
CREATE USER 'replicator'@'%' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO 'replicator'@'%';
FLUSH PRIVILEGES;
获取二进制日志位置 锁定表并获取当前的二进制日志位置。
FLUSH TABLES WITH READ LOCK;
SHOW MASTER STATUS;
配置从服务器
在目标服务器上配置my.cnf
文件,设置唯一的服务器ID并指定主服务器的信息。
[mysqld]
server-id = 2
relay_log = /var/log/mysql/mysql-relay-bin.log
log_bin = /var/log/mysql/mysql-bin.log
read_only = 1
启动复制 在目标服务器上启动复制进程。
CHANGE MASTER TO
MASTER_HOST='source_server_ip',
MASTER_USER='replicator',
MASTER_PASSWORD='password',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=123456;
START SLAVE;
解锁表 解锁表以允许写操作。
UNLOCK TABLES;
选择适合你需求的方法进行数据迁移。对于一次性迁移,mysqldump
和rsync
是最常用的方法;而对于实时同步,MariaDB复制功能更为合适。