mysql主从复制

mysql主从同步
===================== MASTER(主数据库操作) =====================

ubunt linux:

1.修改mysql配置文件 my.cnf:

[mysqld]

#修改主数据server-id和启用bin-log
server-id		= 1
log_bin			= /var/log/mysql/mysql-bin.log
expire_logs_days	= 10
max_binlog_size         = 100M

2.查看log-bin是否启用成功: ON为开启状态

mysql> show variables like 'log%';
+---------------------------------+--------------------------+
| Variable_name                   | Value                    |
+---------------------------------+--------------------------+
| log                             | OFF                      |
| log_bin                         | ON                       |
| log_bin_trust_function_creators | OFF                      |
| log_error                       | /var/log/mysql/error.log |
| log_output                      | FILE                     |
| log_queries_not_using_indexes   | OFF                      |
| log_slave_updates               | OFF                      |
| log_slow_queries                | OFF                      |
| log_warnings                    | 1                        |
+---------------------------------+--------------------------+

3.授权Slave同步用户
mysql> grant replication slave on *.* to 'admin'@'%' identified by 'admin';

4.查看Master状态(日志文件和日志位置)

mysql> show master status;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000200 |  1933734 |              |                  |
+------------------+----------+--------------+------------------+

===================== SLAVE(从数据库操作) =====================

1.修改Master数据库IP,用户名,密码,日志文件,文件当前位置

mysql> change master to master_host='192.168.4.127',master_user='admin',master_password='admin',
master_log_file='mysql-bin.000200',master_log_pos=1890742;

2.导出主数据库的文件,然后倒入从数据库

3.启动主从同步

mysql> start slave;

4.查看slave状态

mysql> show slave status\G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: xxx.xx.xx.xx
                  Master_User: xxxxx
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: binlog.000007
          Read_Master_Log_Pos: 628
               Relay_Log_File: AFODY-604201049-relay-bin.000003
                Relay_Log_Pos: 593
        Relay_Master_Log_File: binlog.000007
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes

注意:Slave_IO_Running,Slave_SQL_Running: 都为YES时才是正确的
主从同步最好使用相同的数据库版本,我测试了一下,使用 master 版本为 5.5.*
slave 版本为 5.7.* 会出现 Slave_IO_Running: NO 因为 5.6有增加了一个 server-uuid 属性
旧版本没有这个属性,所以出问题了,这个问题折腾我半个小时....


===================== 测试 =====================
1.进入主数据库

mysql> create database dog;
Query OK, 1 row affected (0.08 sec)

2.进入从数据库

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| dog                |
| jcticket           |
| mysql              |
| performance_schema |
| sys                |
| test               |
| ticket             |
+--------------------+
8 rows in set (0.00 sec)

==================== SUCCESS ==================== 









  

 

 

 

环境与配置

  系统:CentOS6.5

  Master:172.16.19.2

  Slave:172.16.19.24

  mysql-proxy:172.16.19.14

  安装就不说了,基本都是yum install进行安装的。下图是基本的架构图(忘了从哪里扒拉出来的了,感谢作者)。

主从复制的实现

  主从复制的实现极其简单,只需要改一下vim /etc/my.cnf。

  Master的配置:

vim /etc/my.cnf
log-bin=mysql-bin   #新增
server-id=1              #新增

  配置完之后,重启mysql,然后执行如下指令:

复制代码
master:mysql> grant replication slave on *.* to 'root'@'%' identified by '123456';
然后执行show master status
Mysql> show master status;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000005 | 261 | | |
+------------------+----------+--------------+------------------+
复制代码

  用脑袋或者纸笔记录一下File以及Positin,在这里是mysql-bin.000005以及261。

  Slave的配置:

1 vim /etc/my.cnf
2 log-bin=mysql-bin   #新增
3 server-id=2             #新增  server-id不能一样

  同样的,配置完成之后需要重启mysql服务,然后执行如下指令:

mysql> change master to master_host='172.16.19.2',master_user='root',
master_password='123456',master_log_file='mysql-bin.000005',master_log_pos=261;
mysql> start slave;

  接下来,查看slave的状态,查看是否配置成功:

复制代码
 1 show slave status\G
 2 ==============================================
 3 **************** 1. row *******************
 4 Slave_IO_State:
 5 Master_Host: 172.16.19.2
 6 Master_User: rep1
 7 Master_Port: 3306
 8 Connect_Retry: 60
 9 Master_Log_File: mysql-bin.000005
10 Read_Master_Log_Pos: 261
11 Relay_Log_File: localhost-relay-bin.000008
12 Relay_Log_Pos: 561
13 Relay_Master_Log_File: mysql-bin.000005
14 Slave_IO_Running: YES
15 Slave_SQL_Running: YES
16 Replicate_Do_DB:
17 ……………省略若干……………
18 Master_Server_Id: 1
19 1 row in set (0.01 sec)
20 ==============================================
复制代码

  其中Slave_IO_Running 与 Slave_SQL_Running 的值都必须为YES,才表明状态正常。

主从复制的测试

  先查看主服务器Master:

  

  然后创建一个数据库,y:

  接着去从服务器slave查看,会发现从服务器也有了y数据库。至此数据库的主从复制就实现了。有点晚了,至于说读写分离就下次再说吧

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值