设为首页 收藏本站
查看: 538|回复: 0

[经验分享] MySQL主从配置

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2016-11-9 08:41:20 | 显示全部楼层 |阅读模式
复制的作用:
    辅助实现备份
    高可用
    异地容灾
    scale out:分摊负载

在复制当中server-id很重要   
   
主从架构中,不使用MySQL代理,如何让主的负责写,从的负责读?
1、使用前端开发程序来控制读写分离(增加了开发难度)
2、双主模型(对于读操作可以分担负载,对于写操作没有分担负载)

读写分离:
    mysql-proxy
    amoeba

数据拆分:
    cobar:
   
一个从服务器只能属于一个主服务器

MySQL 5.5: 复制功能实现很简单
MySQL 5.6: gtid(更安全), multi-thread replication(多线程复制)

配置MySQL复制基本步骤:

一、master

1、启用二进制日志
log-bin = master-bin
log-bin-index = master-bin.index

2、选择一个惟一server-id
server-id = {0-2^32}

3、创建具有复制权限的用户
REPLICATION SLAVE
REPLICATION CLIENT

二、slave

1、启用中继日志
relay-log = relay-log
relay-log-index =

2、选择一个惟一的server-id
server-id = {0-2^32}

3、连接至主服务器,并开始复制数据;
    mysql> CHANGER MASTER TO MASTER_HOST='',MASTER_PORT='',MASTER_LOG_FILE='',MASTER_LOG_POS='',MASTER_USER='',MASTER_PASSWORD='';
    mysql> START SLAVE;

    mysql> START SLAVE IO_Thread;
    mysql> START SLAVE SQL_Thread;
   
复制线程:
    master: dump
    slave: IO_Thread, SQL_Thread   
   
read-only = YES
    在从服务器上设定,但对具有SUPER权限的用户不生效;(完成后重启服务,复制线程也会启动)

sync-binlog = ON
    在主服务器上设定,用于事务安全;   
   
1、从服务器能不能执行“写”操作?
CREATE
INSERT
    如何阻止写从服务器?
    my.cnf
    [mysqld]
    read-only = 1
   
不能阻止 SQL Thread
如果某用户有SUPER权限,则不被阻止;
mysql> FLUSH TABLES WITH READ LOCK;

2、一个主服务器可否多从?可以

        一从是否多主?不行
        
3、主-->从:异步

mysql 5.5 google 补丁
    半同步: semisync
   
    半同步如果无法在指定时间完成-->自动 降到异步模式;
   
4、如何从服务器的mysql服务在启动时候不要自动启动从服务线程?
   
master.info
relay-log.info

在从服务器上:
[mysqld]
skip-slave-start=1   


5、数据库复制过滤

在主服务器上实现:
binlog-do-db=testdb
binlog-do-db=mydb

binlog-ignore-db=mysql



主服务器
[mysqld]
binlog-do-db=
OR
binlog-ignore-db=


在主服务器过滤:任何不涉及到数据库相关的写操作都不会被记录到二进制日志当中;

从服务器:
replicate_do_db
rpplicate_ignore_db

replicate_do_table
replicate_ignore_table

replicate_wild_do_table
replicate_wild_ignore_table


在从服务器上只复制mageedu一个数据库:

[mysqld]
replicate_do_db=mageedu
replicate_do_db=mysql

设置半同步步骤:

在Master和Slave的mysql命令行运行如下代码:

# On Master  
mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';  
mysql> SET GLOBAL rpl_semi_sync_master_enabled = 1;  
mysql> SET GLOBAL rpl_semi_sync_master_timeout = 1000;  

# On Slave  
mysql> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';  
mysql> SET GLOBAL rpl_semi_sync_slave_enabled = 1;  
mysql> STOP SLAVE IO_THREAD; START SLAVE IO_THREAD;  

在Master和Slave的my.cnf中编辑:

# On Master  
[mysqld]  
rpl_semi_sync_master_enabled=1  
rpl_semi_sync_master_timeout=1000 # 1 second  

# On Slave  
[mysqld]  
rpl_semi_sync_slave_enabled=1  


# 也可通过设置全局变量的方式来设置,如下:
set global rpl_semi_sync_master_enabled=1
# 取消加载插件
mysql> UNINSTALL PLUGIN rpl_semi_sync_master;
==============================================

查看从服务器上的semi_sync是否开启:
mysql> SHOW GLOBAL STATUS LIKE 'rpl_semi%';

查看主服务器上的semi_sync是否开启,注意clients 变为1 ,证明主从半同步复制连接成功:
mysql> SHOW GLOBAL STATUS LIKE 'rpl_semi%';

工具:
percona: percona-tools
    mattkit-tools
   
   
设置主-主复制:
1、在两台服务器上各自建立一个具有复制权限的用户;
2、修改配置文件:
# 主服务器上
[mysqld]
server-id = 10
log-bin = mysql-bin
relay-log = relay-mysql
relay-log-index = relay-mysql.index
auto-increment-increment = 2
auto-increment-offset = 1

#auto-increment-increment,auto-increment-offset用于解决自动增长时合并表出错,一个用奇数,一个用偶数,起点为1,增长为2


# 从服务器上
[mysqld]
server-id = 20
log-bin = mysql-bin
relay-log = relay-mysql
relay-log-index = relay-mysql.index
auto-increment-increment = 2
auto-increment-offset = 2

3、如果此时两台服务器均为新建立,且无其它写入操作,各服务器只需记录当前自己二进制日志文件及事件位置,以之作为另外的服务器复制起始位置即可

server1|mysql> SHOW MASTER STATUS\G
************************** 1. row ***************************
            File: mysql-bin.000001
        Position: 710
    Binlog_Do_DB:
Binlog_Ignore_DB:
1 row in set (0.00 sec)

server2|mysql> SHOW MASTER STATUS\G
mysql> SHOW MASTER STATUS\G
*************************** 1. row ***************************
            File: mysql-bin.000003
        Position: 811
    Binlog_Do_DB:
Binlog_Ignore_DB:
1 row in set (0.00 sec)

4、各服务器接下来指定对另一台服务器为自己的主服务器即可:
server1|mysql> CHANGE MASTER TO ...,MASTER_LOG_FILE='mysql-bin.000003', MASTER_LOG_POS=811

server2|mysql> CHANGE MASTER TO ...,MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=710

A: 查看B的二进制日志文件及位置,并以及作为自己的复制起点;

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-297772-1-1.html 上篇帖子: 如何将rsyslog日志记录在MySQL数据库中,并且安装前端日志... 下篇帖子: Mysql备份脚本
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表