msyql数据迁移

安装mysql5.7.17
1,下载mysql安装包,打包的glibc类型的包都为免编译的包
mkdir /app
mkdir -p /data/mysql/
cd /app
wget -c https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.17-linux-glibc2.5-x86_64.tar.gz
​
2,解压下载的数据库安装包
tar zxvf mysql-5.7.17-linux-glibc2.5-x86_64.tar.gz
mv mysql-5.7.17-linux-glibc2.5-x86_64 mysql
​
3,创建mysql用户
useradd -M -s /sbin/nologin  mysql
​
4,初始化数据库
cd /app/mysql/bin
./mysqld --initialize --user=mysql --basedir=/app/mysql --datadir=/data/mysql/data
​
初始化完成之后下面会带有数据库的密码保留记录一下为了方便成功登陆数据库修改密码。
[root@mysql bin]# ./mysqld --initialize --user=mysql --basedir=/app/mysql --datadir=/data/mysql/data
2018-01-22T04:29:24.761568Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2018-01-22T04:29:25.055226Z 0 [Warning] InnoDB: New log files created, LSN=45790
2018-01-22T04:29:25.106164Z 0 [Warning] InnoDB: Creating foreign key constraint system tables.
2018-01-22T04:29:25.169516Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: d3981dd8-ff2c-11e7-980f-001e67a6fc71.
2018-01-22T04:29:25.170529Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.
2018-01-22T04:29:25.171641Z 1 [Note] A temporary password is generated for root@localhost: %TlLrm/34D!5
​
5,把配置文件和启动程序拷贝到各自目录下。
mv /app/mysql/support-files/my-default.cnf /etc/my.cnf
mv /app/mysql/support-files/mysql.server /etc/init.d/mysqld
​
6,建立一些需要的文件夹和文件以及链接
mkdir -p /usr/local/mysql/bin/
ln -s /app/mysql/bin/mysqld /usr/local/mysql/bin/mysqld
​
mkdir -p /data/mysql/logs
cd /data/mysql/logs
touch mysql-error.log
chown -R mysql:mysql /data/mysql/logs/
​
mkdir -p /data/mysql/run
chown -R mysql:mysql /data/mysql/run
​
ln -s /app/mysql/bin/mysql /usr/bin/mysql
​
##mysql的配置文件有现成改好的,初始化完成之后可以直接替换。
cat > /etc/my.cnf <<EOF
[mysqld]
user = mysql
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
​
basedir = /app/mysql
datadir = /data/mysql/data
port = 3306
log-error= /data/mysql/logs/mysql-error.log
​
default-storage-engine = INNODB
​
wait_timeout = 31536000
interactive_timeout = 31536000
back_log = 500
max_connections = 20000
key_buffer_size = 402649088
sort_buffer_size = 16777208
slow_query_log = ON
slow_query_log_file = /data/mysql/logs/mysql_slow_query.log
long_query_time = 2
query_cache_size = 128M
​
read_buffer_size = 8M
​
#innodb_additional_mem_pool_size = 10M
innodb_data_file_path = ibdata1:76M:autoextend
#innodb_file_io_threads = 4
innodb_read_io_threads = 4
innodb_write_io_threads = 4
innodb_thread_concurrency = 16
innodb_flush_log_at_trx_commit = 2
innodb_log_buffer_size = 50M  #512
innodb_flush_method=O_DIRECT
innodb_log_file_size = 50M #512
innodb_log_files_in_group = 3
innodb_max_dirty_pages_pct = 90
innodb_lock_wait_timeout = 120
table_open_cache = 10240
​
group_concat_max_len = 102400
EOF
​
7,启动mysql
[root@mysql mysql]# /etc/init.d/mysqld start
Starting MySQL.. SUCCESS!
成功!
​
8,登陆mysql
[root@mysql ~]# mysql -u root –p
密码为初始化数据库时生成的密码
登陆完成之后修改数据库密码以及设置访问权限
mysql> alter user user()  identified by '123456';
Query OK, 0 rows affected (0.00 sec)
​
mysql> grant all privileges on *.* to 'root'@'%' identified by '123456';
Query OK, 0 rows affected, 1 warning (0.00 sec)
​
 

数据迁移
​
1、创建目录,在新机器上
mkdir /data/db_backup
​
2、编写导出脚本
cat > mysql-out.sh <<EOF
#!/bin/bash
HOST=10.211.20.138
USER=root
PASS=123456
BACKUP_DIR=/data/db_backup
DB_LIST=$(mysql -h$HOST -u$USER -p$PASS -s -e "show databases;" 2>/dev/null |egrep -v "Database|information_schema|mysql|performance_schema|sys")
​
for DB in $DB_LIST; do
    BACKUP_NAME=$BACKUP_DIR/${DB}.sql
    if ! mysqldump -h$HOST -u$USER -p$PASS -B $DB > $BACKUP_NAME 2>/dev/null; then
        echo "$BACKUP_NAME 备份失败!"
    fi
done
​
3、执行脚本
bash mysql-out.sh
​
4、编写导入脚本
cat > mysql-in.sh <<EOF
#!/bin/bash
HOST=localhost
USER=root
PASS=123456
BACKUP_DIR=/data/db_backup
​
# 获取备份文件列表
BACKUP_FILES=$(ls -t $BACKUP_DIR/*.sql 2>/dev/null)
​
if [ -z "$BACKUP_FILES" ]; then
    echo "没有找到备份文件!"
    exit 1
fi
​
# 循环导入每个备份文件
for FILE in $BACKUP_FILES; do
    # 提取数据库名
    DB_NAME=$(basename "$FILE".sql | cut -d'.' -f1)
​
    #创建库
    if mysql -h$HOST -u$USER -p$PASS -e "CREATE DATABASE IF NOT EXISTS $DB_NAME"; then
        echo "成功创建数据库 $DB_NAME"
    else
        echo "创建数据库 $DB_NAME 失败!"
        continue
    fi
    
    # 导入数据
    if mysql -h$HOST -u$USER -p$PASS $DB_NAME < "$FILE"; then
        echo "成功导入 $FILE 到数据库 $DB_NAME"
    else
        echo "导入 $FILE 到数据库 $DB_NAME 失败!"
    fi
done
EOF
​
5、执行脚本
bash mysql-in.sh
​
###注意 库名如果有带 “-” 则会创建库失败,需要手动创建库,手动导入
#创建库
create database 库名;
#手动导入
mysql -h localhost -u root -p123456 库名 < /data/db_backup/库名.sql
​
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
迁移MySQL数据库时,可以采取多种方法。其中一种常用的方法是备份和还原。你可以使用mysqldump命令将原有的MySQL数据库备份到一个文件中,然后使用mysql命令将备份文件还原到新的MySQL服务器中。例如,备份一个名为mydb的数据库可以使用以下命令:mysqldump -u root -p mydb > mydb_backup.sql,然后使用以下命令将备份文件还原到新的MySQL服务器中:mysql -u root -p mydb < mydb_backup.sql。\[1\] 另一种常用的方法是导出和导入。你可以使用mysqldump命令将原有的MySQL数据库导出为一个文件,然后使用mysql命令将文件导入到新的MySQL服务器中。例如,导出一个名为mydb的数据库可以使用以下命令:mysqldump -u root -p mydb > mydb_export.sql,然后使用以下命令将文件导入到新的MySQL服务器中:mysql -u root -p mydb < mydb_export.sql。\[1\] 在迁移MySQL数据库时,可能会遇到一些常见的错误。例如,数据库版本不兼容、编码不兼容、数据库用户权限问题、导出或导入的数据量过大、备份文件损坏以及数据库结构不一致等。为了解决这些问题,你需要确保新的MySQL数据库版本与原有的MySQL数据库版本兼容,使用相同的编码,使用具有足够权限的MySQL用户,使用分批次的方式进行导出和导入,确保备份文件完整并且没有损坏,以及确保两个MySQL数据库结构一致。\[2\]\[3\] #### 引用[.reference_title] - *1* *2* *3* [如何迁移MySQL数据库?](https://blog.csdn.net/u010986241/article/details/130038625)[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^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值