zoukankan      html  css  js  c++  java
  • mysql 主从复制 (1)

    Mysql主从配置

    大型网站为了软解大量的并发访问,除了在网站实现分布式负载均衡,远远不够。到了数据业务层、数据访问层,如果还是传统的数据结构,或者只是单单靠一台服务器扛,如此多的数据库连接操作,数据库必然会崩溃,数据丢失的话,后果更是不堪设想。这时候,我们会考虑如何减少数据库的联接,一方面采用优秀的代码框架,进行代码的优化,采用优秀的数据缓存技术如:memcached,如果资金丰厚的话,必然会想到假设服务器群,来分担主数据库的压力。今天总结一下利用MySQL主从配置,实现读写分离,减轻数据库压力.

    这里我们一阿里云为例来配置主从. mysql和mariadb是一样的配置的.我这里一mariadb为实际案例. 配置的时候两台阿里云使用的是内网地址.

    1.阿里云部署环境

    主机( master_mysql ): 192.168.1.200 OS:CentOS 7.4

    从机( slave_mysql ): 192.168.1.201 OS: CentOS 7.4

    主机和从机都需要安装好mysql 或者Mariadb数据库

    2.主数据库的配置

    首先使用命令

    cd /etc

    然后在执行

    ls my.cnf

     

    在使用编辑器vim打开my.cnf文件

    vim my.cnf 按 i 进入编辑模式

     

    几条配置文件的含义如下:

    #设置主服务 的ID (id可以自己随便设置但是要保证和slave的id不一样)
    server-id=200

    innodb_flush_log_at_trx_commit=2  #(参数的含义如下)

    # 0:如果innodb_flush_log_at_trx_commit的值为0,log buffer每秒就会被刷写日志文件到磁盘,提交事务的时候不做任何操作(执行是由mysql的master thread线程来执行的。
    # 主线程中每秒会将重做日志缓冲写入磁盘的重做日志文件(REDO LOG)中。不论事务是否已经提交)默认的日志文件是ib_logfile0,ib_logfile1
    # 1:当设为默认值1的时候,每次提交事务的时候,都会将log buffer刷写到日志。
    # 2:如果设为2,每次提交事务都会写日志,但并不会执行刷的操作。每秒定时会刷到日志文件。要注意的是,并不能保证100%每秒一定都会刷到磁盘,这要取决于进程的调度。
    # 每次事务提交的时候将数据写入事务日志,而这里的写入仅是调用了文件系统的写入操作,而文件系统是有 缓存的,所以这个写入并不能保证数据已经写入到物理磁盘
    # 默认值1是为了保证完整的ACID。当然,你可以将这个配置项设为1以外的值来换取更高的性能,但是在系统崩溃的时候,你将会丢失1秒的数据。
    # 设为0的话,mysqld进程崩溃的时候,就会丢失最后1秒的事务。设为2,只有在操作系统崩溃或者断电的时候才会丢失最后1秒的数据。InnoDB在做恢复的时候会忽略这个值。
    # 总结
    # 设为1当然是最安全的,但性能页是最差的(相对其他两个参数而言,但不是不能接受)。如果对数据一致性和完整性要求不高,完全可以设为2,如果只最求性能,例如高并发写的日志服务器,设为0来获得更高性能


    #开启binlog 志同步功能
    sync_binlog=1

    #binlog 日志文件名
    log-bin=mysql-bin-200

    # 这个表示只同步某个库 (如果没有此项,表示同步所有的库)
    binlog-do-db=xxxx
    上面的配置写好之后按键盘ESC键在按shift+:输入wq.保存退出.

    重启我们的主机数据库看自己的数据库是什么选用不同的命令

    systemctl restart mysql或者 systemctl restart mariadb

    完成后使用

    mysql -u root -p 登录mysql或者mariadb.输入登录密码.这个是自己的数据库的账户密码.

     

    再来给授权给从数据库服务 192.168.1.201, 户名mark,密码123456

    可以根据自己的情况来配置

    grant replication slave on *.* to 'mark'@'192.168.1.201' identified by '123456';

    查看主数据库的状态

    show master status;

     

    到这一步我们就已经完成主数据库的配置了.

    3.从数据库的配置

    和前面的主机配置大同小异.

    server-id=201
    innodb_flush_log_at_trx_commit=2
    sync_binlog=1
    log-bin=mysql-bin-201
    配置完成后一样的保存退出.在重启从机的数据库.

    systemctl restart mysql或者 systemctl restart mariadb

    mysql -u root -p 登录mysql或者mariadb.输入登录密码.这个是自己的数据库的账户密码.

     

    如果配置了同步的数据库,则在从机数据库上面要有一个和主机配置的数据库一样的数据库.

    配置从机连接master

    change master to master_host='192.168.1.200',master_user='mark' ,master_password='12345', master_log_file='mysql- bin-200.000004' ,master_log_pos=671;

    参数说明:

    master_host: 主机的ip

    master_user : 主机授权的用户.

    master_password : 主机授权时候填写的密码

    master_log_file : 主机show master status;中的File

    master_log_pos: 主机show master status;中的Position.

    配置完成后启动slave.

    start slave;

    最后查看slave的状态

    show slave status G;

     

    看到上图的状态就已经完全配置好主从数据库了.

    4.验证是否配置成功

    可以在主库上创建个库,再在从库上刷新查看是否同步

    5.故障排除.

    如果出现1236错误

     

    可以通过:

    停止从机.

    stop slave

    重置从机

    reset slave

    启动从机

    start slave

    来解决这个错误


    ---------------------
    作者:Li-boss
    来源:CSDN
    原文:https://blog.csdn.net/qq_33196814/article/details/81513907
    版权声明:本文为博主原创文章,转载请附上博文链

  • 相关阅读:
    【转】大数据求职者说
    【转】大数据东西辣么多,我该如何给自己一个清晰的定位呢?
    【转】大数据工程师需要学习哪些?
    【English】 Re-pick up English for learning big data (not updated regularly)
    【spark】spark应用(分布式估算圆周率+基于Spark MLlib的贷款风险预测)
    【idea】scala&sbt+idea+spark使用过程中问题汇总(不定期更新)
    【idea】scala&sbt+idea安装配置与测试
    spring boot热部署
    网段判断
    【转】python测试框架--doctest
  • 原文地址:https://www.cnblogs.com/jianmingyuan/p/10903663.html
Copyright © 2011-2022 走看看