mysql主从复制及自动备份脚本

Mysql 安装

本人在安装过程中因为包的选择而走了不少弯路,包有二进制包,源码包,还有做好的rpm包。

最终选择源码安装包安装

安装步骤:

首先是安装所有依赖的包:

yum install make make gcc gcc-c++ autoconf bison automake zlib* fiex* libxml* ncurses-devellibmcrypt* libtool-ltdl-devel* -y

安装完了以后先确定mysql的所有目录:

我的安装路径是:/usr/local/mysql

数据库路径:/data/mysql

源码安装存放位置:/usr/

下载mysql源码安装包

wget http://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.15.tar.gz

mv mysql-5.6.15.tar.gz /usr

解压安装包:

tar –zxvf mysql-5.6.15.tar.gz

cd mysql-5.6.15

开始编译安装

cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
        -DMYSQL_UNIX_ADDR=/data/mysql/mysql.sock\
        -DDEFAULT_CHARSET=utf8 \
        -DDEFAULT_COLLATION=utf8_general_ci\
        -DWITH_EXTRA_CHARSETS:STRING=utf8,gbk\
        -DWITH_INNOBASE_STORAGE_ENGINE=1\
        -DWITH_READLINE=1 \
        -DENABLED_LOCAL_INFILE=1 \
        -DMYSQL_DATADIR=/data/mysql/ \
        -DMYSQL_USER=mysql \
        -DMYSQL_TCP_PORT=3306

 

make&& makeinstall

   

创建用户和组

Groupadd mysqld

Useradd –g mysql –s /sbin/nologin

 到暗转目录下将配置文件拷贝到/etc下

 

 

 cp /usr/local/mysql/support-files/my-default.cnf /etc/my.cnf

为mysql启动及自启动配置

/usr/local/mysql/scripts/mysql_install_db  --user=mysql  --basedir=/usr/local/mysql--datadir=/data/mysql/

 

cp support-files/mysql.server /etc/init.d/mysqld

[root@localhost ~]# chmod 755 /etc/init.d/mysqld
查看mysqld服务是否设置为开机启动
[root@localhost ~]# chkconfig --list|grep mysqld
设置为开机启动
[root@localhost ~]# chkconfig mysqld on

 

配置环境变量

将exportPATH=$PATH:/usr/local/mysql/bin加到/etc/profile

启动数据库

 

Mysql主从复制

一、编译安装MYSQL

 

1、安装依赖包

 

yum install -y gcc make cmake ncurses-devellibxm12-devel libtool-ltdl-devel gcc-c++ autoconf automake bison zlib-devel

2、安装CMAKE

 

tar zxvf cmake-2.8.12.2.tar.gz

 

./configure&&make&&make install

 

3、安装MYSQL

 

tar zxvf mysql-5.6.19.tar.gz

 

cmake-DCMAKE_INSTALL_PREFIX=/usr/local/mysql&&make&&make install

 

useradd -M -s /sbin/nologin mysql

 

cp support-files/my-default.cnf /etc/my.cnf

 

/usr/local/mysql/scripts/mysql_install_db  --user=mysql --basedir=/usr/local/mysql

--datadir=/usr/local/mysql/data

 

chown  -R  .mysql /usr/local/mysql/

 

vim /etc/ld.so.conf

/usr/local/mysql/lib

ldconfig

 

vim /etc/profile

PATH=$PATH:/usr/local/mysql/bin

source /etc/profile

 

cp support-files/mysql.server /etc/init.d/mysqld&&chmoda+x /etc/init.d/mysqld&&chkconfig --add mysqld&&chkconfigmysqld on

 

service mysqld start

1、主从服务器要求:
  1.1、版本一致
  1.2、初始化表,并在后台启动mysql
  1.3、修改root的密码

2、修改主服务器master:
   vi /etc/my.cnf
       [mysqld]
       log-bin=mysql-bin   //[必须]启用二进制日志
       server-id=181      //[必须]服务器唯一ID,默认是1,一般取IP最后一段

3、修改从服务器slave:
   vi /etc/my.cnf
       [mysqld]
       log-bin=mysql-bin   //[不是必须]启用二进制日志
       server-id=182      //[必须]服务器唯一ID,默认是1,一般取IP最后一段

4、重启两台服务器的mysql
   /etc/init.d/mysql restart

5、在主服务器上建立帐户并授权slave:
   #/usr/local/mysql/bin/mysql -uroot -pmttang   
   mysql>GRANT REPLICATION SLAVE ON *.* to 'myname'@'%' identifiedby 'q123456'; //一般不用root帐号,“%”表示所有客户端都可能连,只要帐号,密码正确,此处可用具体客户端IP代替,如192.168.145.226,加强安全。

6、登录主服务器的mysql,查询master的状态
   mysql>show master status;
   +------------------+----------+--------------+------------------+
   |File             |Position | Binlog_Do_DB | Binlog_Ignore_DB |
   +------------------+----------+--------------+------------------+
   | mysql-bin.000004 |      308|             |                 |
   +------------------+----------+--------------+------------------+
   1 row in set (0.00 sec)
   注:执行完此步骤后不要再操作主服务器MYSQL,防止主服务器状态值变化

7、配置从服务器Slave:
   mysql>change master to master_host='192.168.0.181',master_user='myname',master_password='q123456',
        master_log_file='mysql-bin.000004',master_log_pos=308;   //注意不要断开,308数字前后无单引号。

   Mysql>start slave;    //启动从服务器复制功能

8、检查从服务器复制功能状态:

   mysql> show slave status\G

   *************************** 1. row ***************************

              Slave_IO_State: Waiting formaster to send event
              Master_Host:192.168.2.222  //主服务器地址
              Master_User: mysync   //授权帐户名,尽量避免使用root
              Master_Port: 3306   //数据库端口,部分版本没有此行
              Connect_Retry: 60
              Master_Log_File:mysql-bin.000004
              Read_Master_Log_Pos: 600    //#同步读取二进制日志的位置,大于等于Exec_Master_Log_Pos
              Relay_Log_File:ddte-relay-bin.000003
              Relay_Log_Pos: 251
              Relay_Master_Log_File:mysql-bin.000004
              Slave_IO_Running: Yes   //此状态必须YES
              Slave_SQL_Running: Yes    //此状态必须YES
                   ......

注:Slave_IO及Slave_SQL进程必须正常运行,即YES状态,否则都是错误的状态(如:其中一个NO均属错误)。

以上操作过程,主从服务器配置完成。
  
9、主从服务器测试:

主服务器Mysql,建立数据库,并在这个库中建表插入一条数据:

  mysql> create database hi_db;
  Query OK, 1 row affected (0.00 sec)

  mysql> use hi_db;
  Database changed

  mysql>  create table hi_tb(id int(3),name char(10));
  Query OK, 0 rows affected (0.00 sec)
 
  mysql> insert into hi_tb values(001,'bobu');
  Query OK, 1 row affected (0.00 sec)

  mysql> show databases;
   +--------------------+
   |Database           |
   +--------------------+
   | information_schema |
   | hi_db                |
   | mysql                |
   | test                 |
   +--------------------+
   4 rows in set (0.00 sec)

从服务器Mysql查询:

   mysql> show databases;

   +--------------------+
   | Database               |
   +--------------------+
   | information_schema |
   | hi_db                 |      //I'M here,大家看到了吧
   | mysql                 |
   | test          |

   +--------------------+
   4 rows in set (0.00 sec)

   mysql> use hi_db
   Database changed
   mysql> select * from hi_tb;          //查看主服务器上新增的具体数据
   +------+------+
   | id   | name |
   +------+------+
   |    1 | bobu |
   +------+------+
   1 row in set (0.00 sec)
 

6   Mysql备份与恢复

 

mysqldump  -uroot -p --all-databases导出全部数据库。

定时备份数据库

使用计划任务crontab

创建备份全部数据库脚本

mysqlbackup.sh

vim mysqlbackup.sh

#!/bin/sh

mysqldump -uroot -pliaoxz –all-databases>/var/lib/mysqlbackup/dbname`date +%Y-%m-%d_%H%M%S`.bak

cd  /var/lib/mysqlbackup

   rm -rf `find . -name '*.sql.gz' -mtime10`  #删除10天前的备份文件

恢复

mysql –u root –p </opt/mysqlbackup.bak

创建单独备份某个库脚本

#!/bin/sh

mysqldump -uroot -pliaoxz  dbname >/var/lib/mysqlbackup/dbname`date+%Y-%m-%d_%H%M%S`.bak

cd  /var/lib/mysqlbackup

   rm -rf `find . -name '*.bak' -mtime 10` #删除10天前的备份文件

恢复

mysql –u root –p dbname </opt/mysqlbackup.bak

 

ps:一个从只能对应一个主,单主可以对应多从

经过试验,配置三台mysql服务器,a1,a2,a3,a1是a2的主,a2是a3的主,当a1写入数据时a2同步,a3不同步,当在a2写入数据时a3同步。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值