Mysql5.7.% 备库架构搭设及主从同步

写一个小项目需要用到数据库备份以及负载均衡,在这里记录下所走的路以及坑。

首先说下背景,在MySQL4.0之前的主从设置(也叫复制)只有两个线程。之后就变成了三个线程。

    1:主库上把数据更改记录到二进制日志里。

    2:从库读取二进制日志并写到从库的中继日志里。

    3:从库读取中继日志并且将内容写入从库。

之后开始架设MySQL集群。我使用Docker作为MySQL的搭载环境,来实现简单的集群架构。虽然也确实是两个不同服务器上的镜像。ps:镜像地址:docker pull registry.cn-hangzhou.aliyuncs.com/gaara/mysql5.7:1.0

第一步是创建用户。但是以前我对于mysql的用户一直不是很了解。所以临时抱佛脚补了一下。5.7的数据库用户表里,用户的密码是加密之后存储的。也就是 authentication_string 字段。我们常用的一般也就是root了。


像这样的其实是很不安全的。不过我这小门小户的,无所谓了。适用于私人项目。否则Host最好限定IP地址。

那么搭设主从集群,就需要为主库创建一个用户。因为Mysql要赋予一些特殊的权限给复制线程。所以通过如下语句创建:

grant replication slave on *.* to 'name' @'192.168.1.%' identified by 'password';

 解释下命令吧。192.168.1.%通配符,表示0-255的IP都可访问主服务器,正式环境请配置指定从服务器IP。 slave其实就是从库的意思了。

虽然只在主库添加即可,然而实际上官方也建议从库也要分配一个一样的权限。因为从库需要:

    一:用来监控和管理复制的账户都需要这个权限。并且针对这两种目的是要同一个账户更加容易

    二:如果主库拥有账号然后从主库复制数据到从库的时候,从库也就设置好了——变成主库需要的配置。

配置完成之后就能清晰的看见这个权限的范围。当然,我是又添加了一个规则允许我本地查看方便。

接下来(CSDN的字符控制哟。。。大小总变,烦)需要对主库进行一番设置。要将之设置一个第一无二的ServerID。

$:vim my.cnf 
[mysqld]
server_id               = 110      #主从必须不一样
log_bin                 = master-bin
log_bin_index           = master-bin.index
binlog_do_db            = my_data  #这是备份的库
binlog_ignore_db        = mysql    #这是屏蔽的库,我把其余不用的都屏蔽了,这里就不粘了

这个值随意,开心就好。不熟悉my.cnf 的可以这么查找:     find / -name 'my.cnf'

遇到的坑是刚开始的时候my.cnf是新的。里面并没有 [mysqld]这句话。当时也不知道这是干啥的。事实上这句话必须加。

加完之后重启并且检查一下:

mysql> show master status;
+-------------------+----------+--------------+------------------+-------------------+
| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-------------------+----------+--------------+------------------+-------------------+
| master-bin.000001 |      154 | my_data      | mysql            |                   |
+-------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

另外需要注意的是,server_id 不要用1 。很多人习惯性用1这不好。因为一般来说默认服务器的ID是1当然这和版本有关,有的时候mysql不允许使用这个值。所以尽量弄别的。

之后设置备库的值。一样的my.cnf

[mysqld]
server_id		= 111
relay-log		= slave-relay-bin
relay-log-index		= slave-relay-bin.index   #这就是给中继日志设置一下,问题不大

现在开始重要的一步,开启主从通信

mysql> CHANGE MASTER TO
    ->     MASTER_HOST='master_host_name',
    ->     MASTER_USER='replication_user_name',
    ->     MASTER_PASSWORD='replication_password',
    ->     MASTER_LOG_FILE='recorded_log_file_name',
    ->     MASTER_LOG_POS=recorded_log_position;

eg:

mysql> CHANGE MASTER TO
    -> MASTER_HOST='192.168.252.123',
    -> MASTER_USER='replication',
    -> MASTER_PASSWORD='mima',
    -> MASTER_LOG_FILE='mysql-bin.000001',
    -> MASTER_LOG_POS=629;
Query OK, 0 rows affected, 2 warnings (0.02 sec)

当然,嫌懒的话就这样:

CHANGE MASTER TO MASTER_HOST='192.168.252.123', MASTER_USER='replication', MASTER_PASSWORD='mima', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=629;

一句话搞定。再启动一下从服务器的复制线程:

mysql> START SLAVE;
Query OK, 0 rows affected (0.00 sec)

查看一下:

mysql>  show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.252.123
                  Master_User: replication
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000001
          Read_Master_Log_Pos: 629
               Relay_Log_File: master2-relay-bin.000003
                Relay_Log_Pos: 320
        Relay_Master_Log_File: mysql-bin.000001
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes

但是我遇到一个问题,因为我用的是镜像服务,所以我修改了mysql 的端口。那么默认的是3306如何修改成我的呢?

slave stop; 之后添加 

CHANGE MASTER TO MASTER_PORT = 3300; SLAVE START;

另外MASTER_LOG_POS=0 写成0 也是可以的。这个就是说日志从哪里开始读。咱们新库,从0开始。当然了,这说的很草率。因为实际上,日志的开头,是从4开始的。不过无所谓了。

检查主从复制通信状态

Slave_IO_State #从站的当前状态 
Slave_IO_Running: Yes #读取主程序二进制日志的I/O线程是否正在运行 
Slave_SQL_Running: Yes #执行读取主服务器中二进制日志事件的SQL线程是否正在运行。与I/O线程一样 
Seconds_Behind_Master #是否为0,0就是已经同步了

必须都是yes!!!如果是no怎么办! start。。。。。

END






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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值