Mysql备份

[1] 建立自动备份脚本
在这里,为了使数据库备份和恢复的符合我们的实际要求,用一段符合要求的Shell脚本来实现整个备份过程的自动化。
[root@CentOS ~]# vi mysql-backup.sh  ← 建立数据库自动备份脚本,如下:

#!/bin/bash

PATH=/usr/local/sbin:/usr/bin:/bin

# The Directory of Backup
BACKDIR=/backup/mysql

# The Password of MySQL
ROOTPASS=********  此处请将星号替换成MySQL的root密码

# Remake the Directory of Backup
rm -rf $BACKDIR
mkdir -p $BACKDIR

# Get the Name of Database
DBLIST=`ls -p /var/lib/mysql | grep / | tr -d /`

# Backup with Database
for dbname in $DBLIST
do
mysqlhotcopy $dbname -u root -p $ROOTPASS $BACKDIR | logger -t mysqlhotcopy
done
[2] 运行数据库自动备份脚本
[root@CentOS ~]# chmod 700 mysql-backup.sh  改变脚本属性,让其只能让root用户执行
[root@CentOS ~]# ./mysql-backup.sh   运行脚本
[root@CentOS ~]# ls -l /backup/mysql/   确认一下是否备份成功
total 8
drwxr-x— 2 mysql mysql 4096 Sep 1 16:54 mysql   已成功备份到/backup/mysql目录中
[3] 让数据库备份脚本每天自动运行
[root@sample ~]# crontab -e  ← 编辑自动运行规则(然后会出现编辑窗口,操作同vi)
00 03 * * * /root/mysql-backup.sh   添加这一行到文件中,让数据库备份每天凌晨3点进行

测试自动备份正常运转与否(备份恢复的方法)

一些常用的MYSQL SQL语句

我们有些时候太过于以来工具,本来很简单的事情往往折腾很久,这里留些常用的SQL语句供参考,哪怕直接复制也行呐
创建数据库,并指定编码格式

CREATE DATABASE `数据库名称` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci

删除数据库

DROP DATABASE `数据库名称` 

切换数据库

USE `数据库名称` 

为用户添加数据库权限

INSERT  INTO `db`(`Host`,`Db`,`User`,`Select_priv`,`Insert_priv`,`Update_priv`,`Delete_priv`,`Create_priv`,`Drop_priv`,`Grant_priv`,`References_priv`,`Index_priv`,`Alter_priv`,`Create_tmp_table_priv`,`Lock_tables_priv`,`Create_view_priv`,`Show_view_priv`,`Create_routine_priv`,`Alter_routine_priv`,`Execute_priv`) VALUES ('%','数据库名称','用户名','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y')

mysql主从同步

今天测试了一下mysql的主从同步,效果还可以,可以用户大并发下的数据库负载问题,遇到的问题暂时不详,此次只是实验,暂无放在生产环境,

配置完成之后会放到生产环境,在review。

环境:

Linux  centos5.5  32bit

mysql 5.1.58

测试数据库 :test。

测试网络 美国两个地理位置机房。为了不必要的麻烦暂时称之为 IP1和IP2

配置:

首先创建同步的用户

mysql>GRANT all privileges ON *.* TO tongbu@’IP2′ IDENTIFIED BY ‘123456’;

解释:创建只有IP2可以访问的用户tongbu,密码为123456

主数据库配置:vi  /etc/my.cnf
log-bin
server-id = 1
从数据库配置
server_id = 2
log-bin = mysql-bin
master-host = IP1
master-user = tongbu
master-password = ‘123456’ #(如果为空也要打上两个单引号)
master-port = 3306 #(根据具体设置的端口号填)
master-connect-retry = 10 #连接重试次数
replicate-do-db = test #要接收的数据库名,如果有多个数据库,每个数据库一行
replicate-ignore-db= mysql # 设置不要接收的数据库,每个数据库一行 (一般这条可以不写)

重启mysql,
然后进入从数据库开始同步:slave start;
注意点:
1.配置成功后会在mysql目录下生成master.info,如果要更改slave设置,要先将master.info删除,才会起作用。
2.mysql用show slave status 或show master status 查看同步情况。
我测试在从数据库进行ICD操作均可以同步到主数据库,关闭任何一个数据库操作完毕再重启也可以同步。
如此算来如果使用子增长字段可能会出现错误。