搭建mysql主从数据库的架构可以在从服务器可以执行查询工作,降低主服务器压力,在一定程度上达到了均衡负载在从主服务器进行备份,避免备份期间影响主服务器服务。常见的主从配置有一主一丛、一主多从、主从从、主主从(互为主从),用的最多的是一主多从

1,准备环境:

(1)3rhel6.4主机,ip分别为192.168.1.100192.168.1.150192.168.1.200关闭iptablesselinux

(2)3台主机安装的数据库版本为MySQL-5.6

(3)主机192.168.1.100主机为主数据库服务器,主机192.168.1.150100主机的从数据库服务器,主机200150的从数据库服务器,并且主机200不能同步150中的msql

*为了方便下面用分别用100150200代替主机

2,搭建主mysql数据库服务器

(1)安装软件

(2)开启binlog日志功能、设置server-id

# mkdir -p /mysqllog/

chown mysql /mysqllog

# vim /etc/my.cnf

[mysqld]

log_bin=/mysqllog/mysql.bin //指定binlog日志的存放位置和名字

server-id=100

(2)开启数据库服务

# service mysql start

Starting MySQL..........                                   [确定]

# chkconfig mysql on

(3)登陆数据库服务器授权同步用户

# cat .mysql_secret

# The random password set for the root user at ThuMar 20 20:12:19 2014 (local time): pbP7TyWw       //初始密码在/root/.mysql_secret

# mysql -hlocalhost -uroot -ppbP7TyWw

mysql> set password=password("123456"); //修改密码

mysql> quit

# mysql -hlocalhost -uroot -p123456 //重新登陆

mysql> grant replication slave on *.* touser1@"192.168.1.150" identified by "123456"; //                                                                             授权150主机

(4)查看binlog日志文件名及偏移位置

mysql> show master status;

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

| File        | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |

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

| mysql.000002 |   120 |             |                |                   |

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

3,搭建从数据库服务器

(1)安装软件并设置server-id

# vim /etc/my.cnf

[mysqld]

server-id=150

(2)开启服务,保证开机启动

(3)root身份登陆主机指定150主机的主数据库服务器

mysql> change master to

   ->master_host='192.168.1.100',

   ->master_user='user1',

   ->master_password='123456',

   ->master_log_file=' mysql.000002',

   ->master_log_pos=120;

(4)开启slave

mysql> start slave;

(5)查看服务是否开启

mysql> show slave status \G;

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

(6)在主服务器上创建新库slave150主机查看是否同步成功

mysql> create database slave;  //在主数据库里建立slave

Query OK, 1 row affected (0.02 sec)

mysql> show databases;

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

| Database          |

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

| information_schema |

| mysql             |

| performance_schema |

| slave             |        //同步成功

| test              |

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

5 rows in set (0.05 sec)

(7)100主服务器上删除刚才建的新库,以免影响下面的实验

mysql> drop database slave;

Query OK, 0 rows affected (0.03 sec)

4,在200主机上搭建150主机的从服务器

(1)开启150主机的binlog日志功能和链式复制功能

# vim /etc/my.cnf

[mysqld]

log_bin                    //开启binlog日志功能

log-slave-updates          //开启链式复制功能

# service mysql restart

Shutting down MySQL..                                      [确定]

Starting MySQL..                                           [确定]

1 row in set (0.00 sec)

mysql> show master status;  //查看binlog日志及偏移位置

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

| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |

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

| server-bin.000003 |      120 |              |                  |                   |

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

1 row in set (0.00 sec)1 row in set (0.00 sec)

(2)150主机上授权200主机

mysql> grant replication slave on *.* touser2@"192.168.1.200" identified by "123456";

(3)在主机200上安装mysql软件,设置server-idreplicate-ignore-db参数,并启动服务

# vim /etc/my.cnf

[mysqld]

server-id=200

replicate-ignore-db=mysql//禁止从本机同步200主机上的mysql库内容

# service mysql start

Starting MySQL....                                         [确定]

# chkconfig mysql on

(4) root身份登陆200主机指定200主机的主数据库服务器

mysql> change master to

   ->master_host='192.168.1.150',

   ->master_user='user2',

   ->master_password='123456',

   ->master_log_file='server-bin.000003',

   ->master_log_pos=120;

(5)开启slave

mysql> start slave;

Query OK, 0 rows affected (0.02 sec)

(6)查看服务是否运行

mysql> show slave status \G;

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

(7)100主机上建立库slave1验证200主机是否同步成功

mysql> create database slave1; //在主机100上新建库slave1

Query OK, 1 row affected (0.00 sec)


mysql> show databases;

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

| Database          |

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

| information_schema |

| mysql             |

| performance_schema |

| slave1            |//同步成功

| test              |

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

(8)100主机的mysql库中建表,看200主机是否同步到数据

mysql> use mysql;

mysql> create table slave(id int(3));     //100主机的mysql库里建slave

mysql>use mysql;

mysql> show tables;               //200主机上查看,未发现slave表,限制成功

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

            |

| proxies_priv              |

| servers                   |

| slave_master_info         |

| slave_relay_log_info      |

| slave_worker_info         |

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

28 rows in set (0.00 sec)

注意事项:(1)三台主机初始存在的库和表及表结构必须相同

(2) 既做从数据库服务器又要做下一个服务器的主服务器的主机需要开启链式复制功能