#!/bin/bash # databases out save # developer : eisc.cn # 开发: 小绿叶技术博客; 功能:shell 自动导出数据库,将导出的格式为 : 数据库名+时间.sql echo "linux user: $USER ; Enter the current user sudo password: " ; sudo date ; formatdate=`date +%Y.%m.%d-%H%M%S` ; echo "time year month day Hour branch second: $formatdate " dir=/datadisk/eisc/back/sql sudo mkdir -p $dir ; sudo chmod 777 $dir # 数据库导出文件保存目录, 创建这个目录,和附加权限 DestDir=/datadisk/eisc/back/sql DestDBName=(`ls $DestDir | grep "sql" | grep -vE "tar|gz|zip|sh"`) # 目标服务器,需要导入的数据库文件。根据实际存放目录修改 # user=root # passwd=eisc.cn # dataip=127.0.0.1 # 脚本中配置 数据库用户名 和密码 和数据库链接地址 if [ "$user"="" ] then echo "请输入数据库管理员用户和密码以及ip, 案例:root eisc.cn 127.0.0.1 Please enter the database administrator user and password and ip, case: root eisc.cn 127.0.0.1 " read -p "input: " inputuser else echo "[ok] 已经定义过 user 和 passwd 的值!" fi inputuser=($inputuser) user=${inputuser[0]} passwd=${inputuser[1]} dataip=${inputuser[2]} export_databases(){ databases=(`mysql -u $user -p$passwd -e "show databases;"`) NoOutDatabases=(Database information_schema mysql performance_schema sys ) # 这是系统库,不是项目中的数据库。只需要导出项目库 echo "databases is : ${databases[*]} NoOutDatabases is : ${NoOutDatabases[*]} " sudo tar -czvf $dir/sqlback_$formatdate.tar.gz $dir ; sudo rm -rf $dir/* for i in ${databases[*]} do echo "#-------- database $i -----------# " for o in ${NoOutDatabases[*]} do case "$i" in "$o") echo " [ok] $i : The current database does not need to be exported!" ; OutStatus=0 ; echo "" ;echo "" ;; esac done if [ "$OutStatus" = "1" ] then sql="sudo mysqldump --column-statistics=0 -h $dataip -u $user -p$passwd --databases $i" echo "[runing] shell cmd: $sql" ; echo "" $sql > $dir/$i-$formatdate.sql # mysqldump 不支持有变量的数据库,因此赋值为字符串 # 因为新版的mysqldump默认启用了一个新标志,通过- -column-statistics=0来禁用他 else echo "[ok] $i Database does not need to be saved" fi OutStatus=1 # 状态 为 1 才进行导出数据,由于受到 NoOutDatabases 不导出影响,会被定义为 0. 最后再次将状态更新为正常 1 # 注意: shell if 判断的时候需要在变量和值加双引号,否则异常 done echo "数据库导出保存目录: $dir 将目录 $dir 备份为:sqlback_$formatdate.tar.gz" ls -alh $dir } mysql_database_tools(){ #!/bin/bash # shell 自动创建数据库 用户和密码 sudo apt install libncurses* # 解决mysql 命令报错,缺少库:Couldn't find any package by glob 'libncurses.so.5' sudo apt install mysql-client -y # 安装连接数据库工具 sudo mkdir /var/run/mysqld/ sudo ln -s /tmp/mysql.sock /var/run/mysqld/mysqld.sock # 解决 mysql 报错,无法进入mysql 。 mariadb 的启动sock 不一样 runmysql=`sudo netstat -nltp | grep 3306 | grep -w tcp | grep mariadb` if [ ${#runmysql} -lt 1 ] then sudo /etc/init.d/mariadb1011 start fi sudo $installdir/mysql/mariadb1011/bin/mysqladmin -u root password eisc.cn # 启动数据库,重置数据库 root 用户密码为: eisc.cn echo "#---------------- 数据库管理工具 ------------# 参考输入案例: create eisc.cn www www 000000 localhost 1 创建 or 删除,输入: create 或 drop 2 数据库 root 用户密码 3 子数据库名 4 子库用户名 5 子库密码 6 开放数据库方式:本地/远程 输入: localhost 或 % 用空格隔开,必须按照顺序输入6个参数!" read -p "请输入:" in_buff buff=( abcd $in_buff); echo "你输入的信息为: ${buff[*]}"; case ${buff[1]} in "create") # mysql -uroot -p${buff[2]} -e "create database ${buff[3]} character set utf8 collate utf8_bin;" mysql -uroot -p${buff[2]} -e "create database ${buff[3]} character set utf8;" mysql -uroot -p${buff[2]} -e "grant all on ${buff[4]}.* to '${buff[4]}'@'${buff[6]}' identified by '${buff[5]}'" mysql -uroot -p${buff[2]} -e "show databases;SELECT DISTINCT CONCAT('User: ''',user,'''@''',host,''';') AS ListUsername FROM mysql.user where User='${buff[4]}';" ;; "drop") mysql -uroot -p${buff[2]} -e "drop database ${buff[3]}" mysql -uroot -p${buff[2]} -e "drop user '${buff[4]}'@'${buff[6]}'" mysql -uroot -p${buff[2]} -e "show databases;SELECT DISTINCT CONCAT('User: ''',user,'''@''',host,''';') AS ListUsername FROM mysql.user where User='${buff[4]}';" ;; esac } import_databases(){ dipasswd=eisc.cn # 定义 子库密码 echo "将从文件目录: $DestDir 导入数据库, 注意,不能出现重复的数据库文件。一个数据库保留一个sql 文件。列出该目录的文件,如下:" ; ls $DestDir read -p "是否将文件放置在该目录?y/n:" fzfile if [ "$fzfile" != "y" ] then echo "[ok] 退出! 将文件复制到该目录后,重新执行函数" exit fi echo "如果遇到问题,你可以使用 mysql管理工具来创建数据库和用户, 不使用该工具,会自动创建数据库。" for((s=0;s<${#DestDBName[*]};s++)) do di=`echo ${DestDBName[$s]} | awk -F"-" '{print $1}'` difile=${DestDBName[$s]} ShowDBName=`mysql -h $dataip -u $user -p$passwd -e "show databases" | grep $di ` if [ "$ShowDBName" = "$di"] then echo "[error] Database exists $di " else echo "[ok] runing import data $di" mysql -h $dataip -u $user -p$passwd -e "create database $di character set utf8;" mysql -h $dataip -u $user -p$passwd -e "grant all on $di.* to '$di'@'localhost' identified by '$dipasswd'" mysql -h $dataip -u $user -p$passwd -e "show databases;SELECT DISTINCT CONCAT('User: ''',user,'''@''',host,''';') AS ListUsername FROM mysql.user where User='$di';" fi mysql -h $dataip -u $user -p$passwd -e "use $di ; source $DestDir/$difile ; show tables;" echo "[ok] import databases $DestDir/$difile " done } set_file_mysqlpasswd(){ webdir=( "/datadisk/eisc/www/www/puyuetian/mysql/config.php" "/datadisk/eisc/www/xibin/puyuetian/mysql/config.php" ) for file in ${webdir[*]} do echo "set in $file" NR=`cat -n $file | grep PASSWORD | grep -v MYSQL | awk -F" " '{print $1}'` sed -i "$NR a \$_G['SQL']['PASSWORD'] = 'eisc.cn';" $file sed -i "$NR d" $file cat -n $file done } main(){ echo " 欢迎使用,小绿叶技术博客 eisc.cn 数据库搬家,数据库导出与导入工具,提供工具功能: 1. 数据库导出 2. 数据库导入 3. 数据库管理工具,创建与删除数据库和用户 请输入功能序号: Welcome to the small green leaf technology blog eisc.cn database move, database export and import tool, providing tool functions: 1. Database export 2. Database import 3. Database management tool, creating and deleting databases and users Please enter the function serial number: " read -p "input number: " tnumber case "$tnumber" in "1") echo "[runing] 1. Database export" ; export_databases ;; "2") echo "[runing] 2. Database import" ; import_databases ;; "3") echo "[runing] 3. Database management tool" ; mysql_database_tools ;; esac set_file_mysqlpasswd } main # 一键下载使用: wget eisc.cn/file/ubuntu/shell/server/mysql_export_import.sh ; chmod +x mysql_export_import.sh ; ./mysql_export_import.sh