MySQL数据库分库分表脚本实现

目录

1 MySQL分库脚本实现

vim /server/scripts/mysqldump.sh
#!/bin/bash

USER=root
PASSWORD=123456
SOCKET=/data/3306/mysql.sock
LOGIN="mysql -u$USER -p$PASSWORD -S $SOCKET"
DUMP="mysqldump -u$USER -p$PASSWORD -S $SOCKET"
DATABASE=$($LOGIN -e "show databases;"|egrep -v "*schema$|mysql"|sed '1d')

for database in $DATABASE
do
    $DUMP $database| gzip >/server/backup/${database}_$(date +%F).sql.gz
done

测试

[root@db02 ~]# bash /server/scripts/mysqldump.sh
[root@db02 ~]# cd /server/backup/
[root@db02 backup]# ll
total 20
-rw-r--r-- 1 root root 871 Jun 11 10:08 oldboy_2018-06-11.sql.gz
-rw-r--r-- 1 root root 450 Jun 11 10:08 oldgirl_2018-06-11.sql.gz
-rw-r--r-- 1 root root 450 Jun 11 10:08 rsq123_2018-06-11.sql.gz
-rw-r--r-- 1 root root 447 Jun 11 10:08 rsq_2018-06-11.sql.gz
-rw-r--r-- 1 root root 727 Jun 11 10:08 rsq_utf8_2018-06-11.sql.gz

2 MySQL分表脚本实现

vim /server/scripts/mysqldump1.sh
#!/bin/bash

USER=root
PASSWORD=123456
SOCKET=/data/3306/mysql.sock
LOGIN="mysql -u$USER -p$PASSWORD -S $SOCKET"
DUMP="mysqldump -u$USER -p$PASSWORD -S $SOCKET"
DATABASE=$($LOGIN -e "show databases;"|egrep -v "*schema$|mysql"|sed '1d')

for database in $DATABASE
do
    TABLE=$($LOGIN -e "use $database; show tables;"|sed '1d')
    for table in $TABLE
    do
        if [ -d /server/backup/$database ];then
            $DUMP $database $table | gzip >/server/backup/$database/${database}_${table}_$(date +%F).sql.gz
        else
            mkdir /server/backup/$database -p
            $DUMP $database $table | gzip >/server/backup/$database/${database}_${table}_$(date +%F).sql.gz
        fi
    done
done

测试

[root@db02 ~]# bash /server/scripts/mysqldump1.sh
[root@db02 ~]# cd /server/backup/
[root@db02 backup]# ll
total 8
drwxr-xr-x 2 root root 4096 Jun 11 10:00 oldboy
drwxr-xr-x 2 root root 4096 Jun 11 10:00 rsq_utf8
[root@db02 backup]# tree
.
├── oldboy
│   ├── oldboy_student_2018-06-11.sql.gz
│   └── oldboy_test_2018-06-11.sql.gz
└── rsq_utf8
    └── rsq_utf8_rsq_2018-06-11.sql.gz

2 directories, 3 files
[root@db02 backup]# cd
[root@db02 ~]# mysql -uroot -p123456 -S /data/3306/mysql.sock -e "show databases;"
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| oldboy             |
| oldgirl            |
| performance_schema |
| rsq                |
| rsq123             |
| rsq_utf8           |
+--------------------+

# 为什么这么多数据库却只有两个数据库目录生成,原因是其它数据库都是空的
[root@db02 ~]# mysql -uroot -p123456 -S /data/3306/mysql.sock -e "use rsq;show tables;"
[root@db02 ~]# mysql -uroot -p123456 -S /data/3306/mysql.sock -e "use rsq123;show tables;"
[root@db02 ~]# mysql -uroot -p123456 -S /data/3306/mysql.sock -e "use rsq_utf8;show tables;"
+--------------------+
| Tables_in_rsq_utf8 |
+--------------------+
| rsq                |
+--------------------+

猜你喜欢

转载自blog.csdn.net/mr_rsq/article/details/80791069