MySQL主从配置,实现数据备份。

时间:2022-09-14 08:00:35

Replication是MySQL提供的数据库同步复制功能,增强了MySQL数据库的稳定性,对我们实现数据库的容灾、备份带来了极大好处。优点是配置简单并且MySQL自身的replicate消耗整体资源不到1%。

1.安装MySQL

1)在linux镜像中自带mysql安装包,找到:

mysql-server-5.1.61-4.el6.x86_64

mysql-libs-5.1.61-4.el6.x86_64

mysql-5.1.61-4.el6.x86_64

mysql-devel-5.1.61-4.el6.x86_64

2)以root用户安装MySQL:

[root@vmx80 11]# yuminstall mysql

[root@vmx80 11]# rpm-qa|grepmysql

mysql-server-5.1.61-4.el6.x86_64

mysql-libs-5.1.61-4.el6.x86_64

mysql-5.1.61-4.el6.x86_64

mysql-devel-5.1.61-4.el6.x86_64

[root@vmx80 11]#chkconfig–level 2345 mysqld on    

3)mysql的默认目录:

数据库目录:/var/lib/mysql

配置文件目录:/usr/share/mysql

2.配置master

原理:

1、创建用于复制的数据库用户;

2、配置my.cnf;

3、通过dump方式把所需要备份数据库表导出来传到slave端。

步骤:

1)在指定库中创建一张测试表测试同步复制:

[root@vmx80 mysql]#mysql -u root -p

mysql> use test

mysql> create tablecs8(id int);mysql> show tables;

mysql> insert intocs8 values(5);

2)  创建用于数据库同步用户replicate

mysql> grant allprivileges on *.* to 'replicate'@'10.1.1.2' identified by 'replicate';

使设置生效:

mysql> flushprivileges;

3)  停止Mysql服务

[root@vmx80 mysql]#service mysqld stop

4)  更改配置文件/etc/my.cnf

[root@vmx80 mysql]# vi/etc/my.cnf

[mysqld]

datadir=/var/lib/mysql

socket=/var/lib/mysql/mysql.sock

user=mysql

symbolic-links=0

server-id=80

log-bin=mysql-bin

# 1master特有参数

binlog-do-db=test  #如果是要同步多个数据库可以在添加一条binlog-do-db=hive1

binlog_format=ROW

binlog-ignore-db=mysql

expire_logs_days=10  #binlog只保留最近10天的,超过10天为过期自动被删除

# 2下面是切换后作为slave端需要设置的参数,且需注释掉1中参数

relay_log=mysql-relay-bin

replicate-do-db=test

[mysqld_safe]

log-error=/var/log/mysqld.log

pid-file=/var/run/mysqld/mysqld.pid

#####标红注释

l  Log-bin:启动二进制日志文件

l  Binlog-do-db:二进制需要同步的数据库名

l  binlog-ignore-db=mysql:不同步的数据库名

l  Server-id:本机数据库ID

l  Binlog_format:一共有三种复制方式:ROW\STATEMENT\MIXED,默认是STATEMENT

5)通过dump方式导出备份库表数据

[root@vmx80 mysql]# cd/var/lib/mysql

[root@vmx80 mysql]# mysqldump-uroot -p test >test.sql

[root@vmx80 mysql]# scp test.sqlroot@10.1.1.2:/var/lib/mysql/

6、  启动mysql

[root@vmx80 mysql]#service mysqld start

3.配置slave

原理:

1)创建用于复制的数据库用户;

2)创建需要同步的数据库;

3)配置my.cnf;

4)把master传过来的dump导入数据库;

步骤:

1) 创建用于复制的数据库用户:

[root@vmx81]# mysql-uroot -p

mysql> grant allprivileges on *.* to 'replicate'@'10.1.1.1' identified by 'replicate';

让权限生效:

mysql> flushprivileges;

2) 创建需要同步的数据库:

mysql> createdatabase test;--如果slave端没有这个数据库

3)  配置my.cnf:

[root@vmx81 /]# vi/etc/my.cnf

[mysqld]

datadir=/var/lib/mysql

socket=/var/lib/mysql/mysql.sock

user=mysql

server-id=81

log-bin=mysql-bin

# 1 slave特有参数

relay_log=mysql-relay-bin

replicate-do-db=test   #如果同步多个数据库可以添加一条replicate-do-db=hive1

# 2 下面是切换后作为master端需要设置的参数,且需注释掉1中参数

binlog_format=ROW

binlog-do-db=test

binlog-ignore-db=mysql

expire_logs_days=10  #binlog只保留最近10天的,超过10天为过期自动被删除

####注释:

l  server-id为数据库ID,不要和同一个master-slave架构中的其他server-id重复

l  log-bin启用二进制文件

l  relay_log启用从库二进制文件

l  replicate-do-db同步的数据库名`

4) 重启mysql服务以应用配置文件更改项:

[root@vmx81 /]# service mysqldrestart

5)  导入master备份库的dump文件:

[root@vmx81 /]#mysql -uroot -p test < test.sql

4.开启同步复制:

1)在master端:

mysql> change masterto  master_host='10.1.1.2',master_user='replicate', master_password='replicate', master_port=3306,master_log_file='mysql-bin.000001', master_log_pos=106;

2)  在slave端:

mysql> change masterto  master_host='10.1.1.1',master_user='replicate', master_password='replicate', master_port=3306,master_log_file='mysql-bin.000001', master_log_pos=106;

其中各项参数含义如下:

l  master_host master主机IP地址

l  master-user数据同步的用户

l  master-password数据同步的用户密码

l  master-port同步使用端口

l  master_log_file开始同步时读取的初始master二进制文件,通过master端执行show master status查看得到

l  master_log_pos开始同步时读取的初始master二进制文件Position, 通过master端执行show master status查看得到

5.同步测试

目标:

1)  检查master状态;

2)  检查slave状态;

3)  同步之前master端数据表已恢复到slave端;

4)  同步开启后master端与slave端数据双向同步复制;

步骤:

1)  检查master端状态:

mysql> show masterstatus;           #检查作为master的状态

+------------------+----------+--------------+------------------+

| File             | Position | Binlog_Do_DB |Binlog_Ignore_DB |

+------------------+----------+--------------+------------------+

| mysql-bin.000012|      406 | test         |                  |

mysql> show slavestatus \G          #检查作为slave的状态

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

          Read_Master_Log_Pos: 106

               Relay_Log_File:mysql-relay-bin.000026

                Relay_Log_Pos: 251

             Relay_Master_Log_File:mysql-bin.000012

             Slave_IO_Running: Yes

             Slave_SQL_Running: Yes

2)  检查slave端状态:

mysql> show masterstatus;           #检查作为master的状态

+------------------+----------+--------------+------------------+

| File             | Position | Binlog_Do_DB |Binlog_Ignore_DB |

+------------------+----------+--------------+------------------+

| mysql-bin.000012|      106 | test         |                  |

mysql> show slavestatus \G;            #检查作为master的状态

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

          Read_Master_Log_Pos: 406

               Relay_Log_File:mysql-relay-bin.000035

                Relay_Log_Pos: 551

        Relay_Master_Log_File: mysql-bin.000012

             Slave_IO_Running: Yes

            Slave_SQL_Running: Yes

3)  检查同步之前的数据:

mysql> select * fromcs8;

| id   |

+------+

|    5 |

4)测试双向同步复制:

a)        Master端向slave端同步数据:

Master端:

mysql> create tablecs9(id int);

mysql> insert intocs9 values(9);

slave端:

mysql> select * fromcs9;

| id   |

+------+

|    9 |

b)        slave端向master端同步数据:

Slave端:

mysql> create tablecscs(id int);

mysql> insert intocscs values(33);

master端:

mysql> select * fromcscs;

+------+

| id   |

+------+

|   33 |

+------+

至此,mysql已经设置完毕。