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

[经验分享] mysql master-slave集群搭建

[复制链接]
累计签到:2 天
连续签到:1 天
发表于 2015-4-30 08:44:39 | 显示全部楼层 |阅读模式
mysql 主从复制模式主要为master负责接收用户的请求,DDL,DML,DCL等操作,slave主要负责同步master的二进制日志,以便备份数据。在一此数据库访问量比较大的场景,master-slave模式还可以结合mysql-proxy做读写分离,mysql-proxy负责将用户的写请求转发到master,将用户的读请求转发到slave,以分担数据库的压力。甚至更健壮的系统,一个master对应多个slave,做成高可用HA集群,当master宕机的时候,多个slave会协商出一个slave重新成为master,以达到服务的持续性。


        在mysql master-slave架构中,slave会启动两个主要的线程,一个是io thread,另一个是sql thread。大家都知道,mysql的replication主要是通过slave同步master中的二进制日志,然后将二进制日志先储存在slave中的中继日志中,然后再在本地通过读取中继日志执行sql操作。io thread主要完成的工作就是第一步,而sql thread主要工作是从中继日志中读取日志,然后进行本地操作。而对于master而言,也会启动一条dump线程,该线程主要的作用是响应slave的io thread请求,将二进制日志发送到slave。主要流程图如下: wKiom1VANwbiCkNFAADbR8DA6No439.jpg


        下面来一步一步搭建mysql的master-slave架构。



        1、环境准备

            os:centos 6.4

            mysql服务器:5.5.28(2台)

       ip分配:master:192.168.1.101
                        slave:192.168.1.108
            mysql通过二进制安装包:mysql-5.5.28-linux2.6-x86_64.tar.gz


        2、mysql安装

            解压到/usr/local目录

            tar xf mysql-5.5.28-linux2.6-x86_64.tar.gz -C /usr/local
            添加软链

            ln -sv /usr/local/mysql-5.5.28-linux2.6-x86_64 /usr/local/mysql
        添加mysql用户,用户组
            groupadd -r mysql

            useradd -r -g mysql -s /sbin/nologin mysql

            添加mysql数据目录

            mkdir -pv /data/mysql

            chown -R mysql:mysql /data/mysql

            初始化mysql数据库
            cd /usr/local/mysql

            chown -R root.mysql ./*

            scripts/mysql_install_db --user=mysql --datadir=/data/mysql
        复制mysql配置文件,启动脚本
            cp support-files/my-large.cnf /etc/my.cnf
            cp support-files/mysql.server /etc/init.d/mysqld
            chkconfig --add msyqld



        3、master配置

            vim /etc/my.cnf

            在[mysqld]中添加:

            datadir=/data/mysql
            innodb_file_per_table=1 # 对innodb来说每表一个表空间文件

        log-bin=master-bin #开启二进制日志功能

            log-bin-index=master-bin.index #二进制日志文件的索引文件

            #server_id可暂时不用改,只要不和slave中的server_id一样即可

           保存退出。


        4、初始化master
            用mysql进入交互命令行界面

            授权relication slave复制权限
            mysql> grant relication slave on *.* to 'repluser'@'192.168.1.%' identified by 'replpass';

            mysql> flush privileges; #读取授权表



        5、安装slave

            按上述相同方式安装好slave。



        6、slave配置
            vim /etc/my.cnf
            在[mysqld]中添加:
            datadir=/data/mysql
            innodb_file_per_table=1 # 对innodb来说每表一个表空间文件
        relay-bin=relay-bin #开启中继日志功能
            relay-bin-index=relay-bin.index #中继日志文件的索引文件
            read_only=1 #设置slave为只读模式
            server_id=10#注意,slave中的server_id不能和master的server_id相同。
        保存退出。

        7、初始化slave
            用mysql进入交互命令行界面
            mysql> change master to
                       master_host='192.168.1.101',
                       master_user='repluser',
                       master_password='replpass',
                       master_log_file='master-bin.000002',
                       master_log_pos=107
            #其中master_log_file和master_log_pos是在master中通过show master status命令查看到的。
            #所以务必要先在master中查看对应的值后,再执行此命令。
            #master_log_file:slave要同步的二进制文件
            #master_log_pos:同步的起始位置

        8、启动slave
                mysql> start slave
                #此命令会同步启动io_thread和sql_thread,也可以独启动它们。
                #mysql> start slave io_thread
                #mysql> start slave sql_thread

        至此,mysql的master-slave模式基本搭建完成了。
        在slave中可查看slave的状态信息
        mysql> show slave status \G;
            wKioL1VARtuR2IezAALcBilSDLw740.jpg

            看到以上信息,恭喜你,master-slave已经搭建成功了。

        9、测试
        在master中创建一个数据库
        mysql> create database leedb;
        在slave中查看数据库
        mysql> show databases;
        可以看到刚才在master中的leedb自动同步到slave中了。以后在master中所有可能引起数据库变更
        的动作都会自动同步到slave中了。当然,mysql可以对数据库或对数据表进行过滤同步,可以有选
        择性地同步某个数据库或者某个数据库的某张表,这个留待后续再讨论。
        


运维网声明 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-62096-1-1.html 上篇帖子: MySQL数据库基础 下篇帖子: mysql 主从同步 mysql
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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