zoukankan      html  css  js  c++  java
  • mysql主从

    1. MySQL主从原理以及应用场景MySQL的Replication原理非常简单,总结一下:
    每个从仅可以设置一个主。
    主在执行sql之后,记录二进制log文件(bin-log)。
    从连接主,并从主获取binlog,存于本地relay-log,并从上次记住的位置起执行sql,一旦遇到错误则停止同步。
    从这几条Replication原理来看,可以有这些推论:
    主从间的数据库不是实时同步,就算网络连接正常,也存在瞬间,主从数据不一致。
    如果主从的网络断开,从会在网络正常后,批量同步。
    如果对从进行修改数据,那么很可能从在执行主的bin-log时出现错误而停止同步,这个是很危险的操作。所以一般情况下,非常小心的修改从上的数据。
    一个衍生的配置是双主,互为主从配置,只要双方的修改不冲突,可以工作良好。
    如果需要多主的话,可以用环形配置,这样任意一个节点的修改都可以同步到所有节点。
    可以应用在读写分离的场景中,用以降低单台MySQL服务器的I/O
    可以实现MySQL服务的HA集群
    可以是1主多从,也可以是相互主从(主主)
    2. 安装、配置MySQL
    参考之前步骤搭建MySQL服务
    为了做实验方便,我们在同一台机器上配置两个MySQL服务(跑两个端口)
    cd /usr/local/; cp -r mysql mysql_2; cd mysql_2;
    初始化mysql2: ./scripts/mysql_install_db --user=mysql --datadir=/data/mysql2   
    拷贝配置文件:cp /etc/my.cnf ./my.cnf
    修改配置文件相关参数:vim my.cnf  #更改port 以及 socket
    启动:/usr/local/mysql_2/bin/mysqld_safe --defaults-file=/usr/local/mysql_2/my.cnf --user=mysql &
    若开机启动它,需加入到 /etc/rc.local中
    3. 配置主从准备工作
    设定mysql_2 为主端口3307,mysql为从端口为3306
    在主上创建测试库: create database db1;
    然后导出主的mysql库数据然后导入给db1
    mysqldump -uroot -S /tmp/mysql2.sock mysql > 123.sql ;
    mysql -uroot -S /tmp/mysql2.sock db1 < 123.sql
    4. 配置主(master)
    vim /usr/local/mysql_2/my.cnf   #修改或添加:
    server-id=1
    log-bin=mysql-bin  
    两个可选参数(2选1):
    binlog-do-db=db1,db2 #需要同步的库
    binlog-ignore-db=db1,db2 #忽略不同步的库
    修改配置文件后,重启mysql_2
    pid=`ps uax |grep mysql2.sock |grep -v grep |awk '{print $2}'` ; kill $pid; cd /usr/local/mysql_2/bin/; ./mysqld_safe --defaults-file=../my.cnf --user=mysql &
    设置root密码:mysqladmin -u root -S /tmp/mysql2.sock password '123456'
    mysql -u root -S /tmp/mysql2.sock -p'123456'
    grant replication slave on *.* to 'repl'@'127.0.0.1' identified by '123123';
    flush tables with read lock;
    show master status; #一定要记住前两列的内容,一会会用到
    5. 设置从(slave)
    vim /etc/my.cnf  #修改或增加
    server-id = 2 #这个数值不能和主一样
    可选参数:replicate-do-db=db1,db2 和 replicate-ignore-db=db1,db2 #意义同主的那两个可选参数
    service mysqld restart
    拷贝主的db1库数据到从:mysqldump -uroot -S /tmp/mysql2.sock -p123456 db1 > db1.sql; mysql -uroot -p -e "create database db1"; mysql -uroot -p  db1 < db1.sql
    mysql -uroot -p  #登陆从的mysql
    slave stop;
    change master to master_host='192.168.10.200', master_port=33306, master_user='slave', master_password='123456', master_log_file='mysql-bin.000041', master_log_pos=474952;

    slave start;
    主上: mysql -uroot -S /tmp/mysql2.sock -p123456 -e "unlock tables"
    从上查看从的状态: show slave statusG;

    看到两个YES就是对了
    6. 测试主从
    主上清空db1库的db表 :use db1; select count(*) from db"; truncate table db;  
    进入slave,查看db1库db表: use db1; select count(*) from db";  
    主上删除表db: drop table db;
    从上看db表不存在了
    建议: MySQL主从机制比较脆弱,谨慎操作。如果重启master,务必要先把slave停掉,也就是说需要在slave上去执行 slave stop 命令,然后再去重启master的mysql服务,否则很有可能就会中断了。当然重启完后,还需要把slave给开启 slave start.

     这虽然和我做的过程不一样,但是借鉴了好多

    转自http://www.aminglinux.com/bbs/thread-7379-1-1.html

  • 相关阅读:
    VIJOS-P1340 拯救ice-cream(广搜+优先级队列)
    uva 11754 Code Feat
    uva11426 GCD Extreme(II)
    uvalive 4119 Always an Interger
    POJ 1442 Black Box 优先队列
    2014上海网络赛 HDU 5053 the Sum of Cube
    uvalive 4795 Paperweight
    uvalive 4589 Asteroids
    uvalive 4973 Ardenia
    DP——数字游戏
  • 原文地址:https://www.cnblogs.com/cuizhipeng/p/4554026.html
Copyright © 2011-2022 走看看