平时工作中因为都是云端部署,所以使用比较多的就是MySql,Mongodb,Redis等系统。平时需要用各种脚本对数据库做各种操作。在这里把各种脚本整理一下,大多数情况改改就可以在别的环境用了。
MySql
Docker运行MySql
脚本里面//表示注释,使用的时候要去掉
docker run -d \
--name mysql_master \ //容器名
-p 3306:3306 \ //暴露3306端口到宿主机
-v /data/mysql_master/mysqld.cnf:/etc/mysql/my.cnf \ //共享文件,把配置文件放到宿主机,方便修改
-v /data/mysql_master/data:/var/lib/mysql \ //共享文件,把数据放到宿主机,方便备份
-v /data/mysql_master/log:/var/log/mysql \ //共享文件,把日志放到宿主机,方便查询
-v /etc/localtime:/etc/localtime:ro \ //共享文件,把容器的时间和宿主机统一
-e MYSQL_ROOT_PASSWORD=xxxx \ //给定root账户密码
mysql:5.6 //指定mysql版本
对MySql容器进行数据备份或者恢复操作
进入容器内部环境
sudo docker exec -it mysql_master bin/bash
然后用
mysql -uroot -p进入mysql客户端,使用source恢复数据
或者直接用mysqldump备份数据
也可以在宿主机安装一个mysql的客户端
yum -y install mysql
因为之前已经把容器的3306端口暴露到了宿主机,那么在宿主机上直接用客户端操作3306端口就可以了
在Windows服务器上备份MySql
set "Ymd=%date:~,4%%date:~5,2%%date:~8,2%" //获取当前时间
if not exist "D:\DatabaseBak\MySQL" md "D:\DatabaseBak\MySQL" //创建备份文件夹
if exist "D:\DatabaseBak\mysql_%Ymd%.sql" del /q D:\DatabaseBak\mysql_%Ymd%.sql //如果已经有备份文件,先删除
if exist "D:\DatabaseBak\MySQL\mysql_%Ymd%.zip" del /q D:\DatabaseBak\MySQL\mysql_%Ymd%.zip //如果已经有备份文件压缩包,先删除
"C:\Program Files\MySQL\MySQL Server 5.5\bin\mysqldump.exe" --default-character-set=utf8 -h localhost -P 3306 --databases db1 db2 -u root -pxxxx --add-drop-table -R> "D:/DatabaseBak/mysql_%Ymd%.sql" //命令行含义分别是:使用安装在windows上面的客户端备份,设置导出文件的字符集(很重要),指定ip和端口,指定备份部分数据库,指定账号和密码,指定是否加上add和drop表的语句,配置导出存储过程
7z.exe a "D:/DatabaseBak/mysql_%Ymd%.sql" "D:/DatabaseBak/mysql_%Ymd%.zip" //用7zip的命令行工具做压缩
dump单个库文件
"C:\Program Files\MySQL\MySQL Server 5.5\bin\mysqldump.exe" -h localhost -P 3306 -uroot -pxxxx --hex-blob -B db1 > "D:\dumpfordelete\db.dump"
–hex-blob;这个命令是用于将BINARY, VARBINARY, BLOB, BIT类型导出为十六进制,这样再导入时不易产生错乱。
B参数可以备份多个数据库,可以把需要备份的数据库名字都写在后面
在Windows服务器上恢复MySql备份
"C:\Program Files\MySQL\MySQL Server 5.5\bin\mysql.exe" -h localhost -P 3306 -uroot -pxxxx< "D:/DatabaseBak/mysql.sql"
从一个很大的备份文件恢复某个特定的数据库
"C:\Program Files\MySQL\MySQL Server 5.5\bin\mysql.exe" -h localhost -P 3306 -uroot -pxxxx -D onedatabase -o< "D:\DatabaseBak\mysql.sql"
备份上传至远端的Linux服务器上
这里需要使用pscp.exe这个Command-line SCP/SFTP client。
pscp.exe -pw xxxx mysql.zip [email protected]:/data // 命令行含义分别是:使用pscp工具,登录192.168.1.1这个linux服务器,使用root账号,密码为xxxx,把本地的mysql.zip文件传输到服务器的data目录下
这个命令可以使用于很多场景,不限于MySql。
命令行远程登录的Linux服务器上执行命令
这里需要使用putty.exe
start putty.exe 192.168.1.1 -ssh -l root -pw xxxx -P 22 -m command.txt // 命令行含义分别是:使用putty.exe工具,登录192.168.1.1这个linux服务器,使用root账号,密码为xxxx,登录端口为22,执行命令放在command.txt文件里面
command.txt写的命令如下:
unzip -o /data/mysql.zip -d /data/ && //解压zip文件
mysql -h 127.0.0.1 --password=xxxx --port=3306 -u root <<EOF // 进入mysql命令行root账号
source /data/mysql.sql // 使用source恢复mysql
EOF
这个命令同样可以使用于很多场景,不限于MySql。
通过批处理命令行执行Windows服务器上MySql的Sql语句
"C:\Program Files\MySQL\MySQL Server 5.5\bin\mysql.exe" -h localhost -P 3306 -uroot -pxxxx -e "USE database1;UPDATE `company SET name='demo' where Code=%1;"
// -e后面的是需要执行的SQL语句,注意语句里面有%1,这个是批处理的参数,所以可以通过这个方式,把批处理里面的参数传入到需要执行的SQL语句中
使用Windows版本MySQLProxy转发MySQL请求
D:\mysql-proxy\bin\mysql-proxy --proxy-backend-addresses=192.168.1.1:3306 --proxy-address=0.0.0.0:3306
//把192.168.1.1:3306端口上的mysql映射到本机的3306端口,这样访问本机的3306端口实际上就是方位192.168.1.1上3306的数据库服务
Mongodb
Docker运行Mongodb
docker run --name testmongodb -d \ //容器名
--cpuset-cpus=1 \ //如果宿主机是多核服务器,使用其中的第二个核
-m 1024m \ //限定最多使用1024m内存
-p 27017:27017 \ //暴露27017端口到宿主机
-v /data/mongo/db:/data/db \ //共享文件,把数据放到宿主机,方便备份
-v /etc/localtime:/etc/localtime:ro \ //共享文件,把容器的时间和宿主机统一
-v /data/mongo/dbconfig:/data/configdb \ //共享文件,把配置文件放到宿主机,方便修改
mongo:3.2 //指定mongodb版本
在Windows服务器上备份Mongodb
前面的一些清空备份的命令就不写了
"D:\mongodb\bin\mongodump.exe" -h localhost -d log -o "D:\DatabaseBak\MongoDBdump\mongodb_log" //备份localhost:27017(27017是默认的)上log这个database里面的数据,到后面D:\DatabaseBak\MongoDBdump\mongodb_log这个文件夹下面
在Windows服务器上恢复Mongodb备份
"D:\mongodb\bin\mongorestore.exe" -h 192.168.1.1:27017 -d log --directoryperdb "D:\DatabaseBak\MongoDBdump\mongodb_log" //恢复192.168.1.1:27017这个mongodb的服务器,恢复的database名为log,备份数据放在D:\DatabaseBak\MongoDBdump\mongodb_log文件夹下面
Redis
Docker运行Redis
docker run --name testredis -d \ //容器名
--cpuset-cpus=2 \ //如果宿主机是多核服务器,使用其中的第三个核
-m 1024m \ //限定最多使用1024m内存
-p 6379:6379 \ //暴露6379端口到宿主机
-v /data/redis:/data \ //共享文件,把数据持久化到宿主机,方便备份
-v /etc/localtime:/etc/localtime:ro \ //共享文件,把容器的时间和宿主机统一
redis:2.8 \ //指定redis版本
redis-server --appendonly yes //配置Redis的数据持久化
如果这篇文章对你有一点帮助,请点击右上角的“赞同”。也欢迎留言和我交流。