一、背景
由于腾讯云服务器快过期了,我便买了阿里的服务器,毕竟有学生优惠。由于有一些数据还在腾讯云上,不可能手动搬,只好踏上了数据库迁移的不归路。
二、阿里云服务器
第一次用阿里云服务器搭mysql服务,配置好后本地可以登录,但远程无法连接,查半天原来是没有加安全组。
实例-更多-网络和安全组-安全组配置
后面配置下端口即可远程登录了 - A -
配置3306端口
三、权限
1.问题
本来做好准备迁移了,但打开腾讯云输入
mysql -u root -p
并不能登录,反复确认并不是密码错误,莫名的不能本地登录,但远程可以。所以把问题定位在了host的问题上。
2.修改用户表
修改mysql配置表
vim /etc/my.cnf
在[mysqld]下增加一句
skip-grant-tables
然后保存文件,重启mysqld服务
systemctl restart mysqld
进入mysql(没错,不用输入密码账号)
mysql
查看用户表
mysql> use mysql;
mysql> select host,user,password from user;
这时候问题来了,我发现了host为localhost的这条有点奇怪。如下
host
user
password
localhost
这条数据user和password都为空。
增加内容
mysql> update user set user='root',password=password('密码') where host='localhost';
更新下权限
mysql> flush privileges;
重新配置my.cnf
打开/etc/my.cnf注释或删除刚刚添加的skip-grant-tables,然后重启服务systemctl restart mysqld;
再次登录mysql
输入密码账号后就登录进去了,但这并没有结束!发现use mysql并没有权限!只好重新改my.cnf来一次。
改好后重启服务后,直接进入mysql。
先刷新下权限。
mysql >flush priveleges.
然后设置权限,干脆全部权限都给了好了。
mysql > grant all on *.* to root@'%';
这个语法剖析一下就是
grant privileges database.table to user@host
privileges可以是all,select,update,insert等操作
大功告成,可以愉快地使用数据库了 !
四、转移
前提
这里把转移的服务器称为A,被转移的服务器称为B。
生成sql
在A服务器中
mysql -uroot -p blog > blog.sql
就是将blog这个数据库的内容输出到blog.sql文件里,文件命名随意。
传输sql文件
可以通过任何方式把这个文件从A转移到B中。
笔者使用的是scp。
scp blog.sql root@xxx.xxx.xxx.xxx:/
语法是
scp localfile user@host:des
scp 本地文件 用户@主机:目的文件夹
转移
打开B服务器的mysql,创建同样的数据库
mysql> create database blog
进入数据库
mysql> use blog;
导入资源,注意文件目录
mysql> source blog.sql
然后就会看见哗啦哗啦地刷屏,等待刷屏结束后,这就转移结束了!