• Linux-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_slave; cd mysql_slave; 
    初始化mysql2: ./scripts/mysql_install_db --user=mysql_slave --datadir=/data/mysql_slave
    拷贝配置文件:cp /etc/my.cnf ./my.cnf 
    修改配置文件相关参数:vim my.cnf  #更改port , socket , datadir=/data/mysql_slave
    启动:/usr/local/mysql_slave/bin/mysqld_safe --defaults-file=/usr/local/mysql_2/my.cnf --user=mysql & 

    cp /etc/init.d/mysqld /etc/init.d/mysqld_slave vim !$ 指定my.cnf:conf=$basedir/my.cnf
    若开机启动它,需加入到 /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='127.0.0.1', master_port=3307, master_user='repl', master_password='123123', master_log_file='mysql-bin.000006', master_log_pos=474952; 
    slave start;
    主上: mysql -uroot -S /tmp/mysql2.sock -p123456 -e "unlock tables" 
    从上查看从的状态: show slave statusG;

    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.

    不同主机:

    mysql服务器的主从配置,这样可以实现读写分离,也可以在主库挂掉后从备用库中恢复

    需要两台机器,安装mysql,两台机器要在相通的局域网内

    主机A: 192.168.1.100

    从机B:192.168.1.101

    可以有多台从机

    1、先登录主机 A

    mysql>GRANT REPLICATION SLAVE ON *.* TO ‘backup’@’192.168.1.101‘ IDENTIFIED BY ‘123456’;

    赋予从机权限,有多台丛机,就执行多次

    2、 打开主机A的my.cnf,输入

    server-id               = 1    #主机标示,整数
    log_bin                 = /var/log/mysql/mysql-bin.log   #确保此文件可写
    read-only              =0  #主机,读写都可以
    binlog-do-db         =test   #需要备份数据,多个写多行
    binlog-ignore-db    =mysql #不需要备份的数据库,多个写多行

    3、打开从机B的my.cnf,输入

    server-id               = 2
    log_bin                 = /var/log/mysql/mysql-bin.log
    master-host     =192.168.1.100
    master-user     =backup
    master-pass     =123456
    master-port     =3306
    master-connect-retry=60 #如果从服务器发现主服务器断掉,重新连接的时间差(秒)
    replicate-do-db =test #只复制某个库
    replicate-ignore-db=mysql #不复制某个库

    4、同步数据库

    不用太费事,只把主从库都启动即可自动同步,如果不嫌麻烦的话可以把主库的内容导出成SQL,然后在从库中运行一遍

    5、先重启主机A的mysql,再重启从机B的mysql

    6、验证

    在主机A中,mysql>show master statusG;

    在从机B中,mysql>show slave statusG;

    能看到大致这些内容

    File: mysql-bin.000001
    Position: 1374
    Binlog_Do_DB: test
    Binlog_Ignore_DB: mysql

    可以在主机A中,做一些INSERT, UPDATE, DELETE 操作,看看主机B中,是否已经被修改

  • 相关阅读:
    【Swift】WKWebView与JS的交互使用
    【React Native】进阶指南之二(手势响应系统)
    【React Native】进阶指南之一(特定平台、图片加载、动画使用)
    React Native适配IPhoneX系列设备之<SafeAreaView />
    【React Native】react-native之集成支付宝支付、微信支付
    【React Natvie】React-native-swiper的安装和配置【ES6】
    React Native之React Navigation踩坑
    遭遇裁员,如何渡过心理危机?
    Spring 核心技术与产品理念剖析【下】
    Spring 核心技术与产品理念剖析【上】
  • 原文地址:https://www.cnblogs.com/Nyan-Workflow-FC/p/5740209.html
Copyright © 2020-2023  润新知