• 部署mysql主从同步


                                                 mysql-day06        部署mysql主从同步

    案例拓扑

    • 一主、一从

    – 单向复制时,建议将从库设为只读

    一、什么是mysql主从同步

      主:正在被客户端访问的数据库服务器,被称作主库服务器。

      从:自动同步主库上的数据的数据库服务器,被称作从库服务器。

      主从同步结构模式介绍

    •基本应用

    –单向复制:-->

    •扩展应用

    –链式复制:-->-->

    –双向复制:<-->

    –放射式复制:<---->

                      |

                     从

    主从同步原理(1 )

    基本构建思路

    1.确保数据相同

    –从库必须要有主库上的数据。

    2.配置主服务器

    –启用binlog日志及设置格式,设置server_id,授权用

    3.配置从服务器

    –设置server_id,指定主数据库服务器信息

    4.测试配置

    –客户端连接主库,写入的数据,在连接从库的时候也

    能够访问到。

    相关命令

    mysql>show slave status;#显示从库状态信息

    mysql>show master status;#显示本机的binlog日志文件信息

    mysql>show processlist;#查看当前数据库服务器上正在执行的程序

    mysql>start slave;#启动slave进程

    mysql>stop slave;#停止slave进程

    ***************************************************

    确保数据相同

    •Master服务器

    应包括希望同步的所有库

    对采用MyISAM的库,可离线备份

    mysql>RESET MASTER;

    //重置binlog日志

    [root@dbsvr1~]#mysqldump -u root -p  -B mysql test > mytest.sql

    Enter password:

    //验证口令确保数据相同(续1)

    •Slave服务器

    离线导入由Master提供的备份

    清空同名库(若有的话)

    mysql>DROP DATABASE test;

    //先清理目标库

    [root@dbsvr2~]#scp dbsvr1:/root/mytest.sql./

    //直接scp远程拷贝

    [root@dbsvr2~]#mysql -uroot -p < mytest.sql

    Enter password:

    //验证口令

    ******************************************************


    问题:

    2.1拓扑图

    数据库服务器192.168.4.51做主库

    数据库服务器192.168.4.52做从库

    2.2环境准备

    主从同步未配置之前,要保证从库上要有主库上的数据。

    禁用selinux]#setenforce 0

    关闭防火墙服务]#systemctl stop firewalld

    物理连接正常]#ping-c 2 192.168.4.51/52

    数据库正常运行,管理可以从本机登录

    *********************host 192.168.4.52配置主库

    1)启用binlog日志

    Vim /etc/my.cnf

    [mysqld]

    server_id=52

    log-bin=master52

    binlog-format="mixed"

    :wq

    1)启动服务

    ]#systemctl restart mysqld

    2)查看binlog日志文件名

    ]#ls /var/lib/mysql/master52.*

    /var/lib/mysql/master52.000001  /var/lib/mysql/master52.index

    3)查看徧移量

    ]#mysql -uroot -p1234564

    mysql>show master status;

    4)做用户授权 (在主库上52给从库53授权)

    mysql>grant replication slave on *.*

    ->to

    ->repluser@"192.168.4.53"

    ->identified by"123456";

    # grant replication slave on *.* to yaya@"192.168.4.54" identified by"123456";

    5)查看授权用户

    mysql>select user,host from mysql.user;

    *********************host 192.168.4.53配置从库

    a验证主库的用户授权

    ]#mysql -h192.168.4.52 -urepluser- p123456

    mysql>show grants;

    mysql>quit;

    1)指定server_id

    ]#vim /etc/my.cnf

    [mysqld]

    server_id=53

    :wq

    ]#systemctl restart mysqld

    2)数据库管理员本机登录,指定主数据库服务器的信息

    ]#mysql -uroot -p123456

    mysql>change master to

    master_host="192.168.4.52",//主库

    master_user="yaya",//连主库用户

    master_password="123456",//用户密码

    master_log_file="master52.000001",//binlog日志文件名

    master_log_pos=448;//徧移量

                 # change master to master_host="192.168.4.52", master_user="yaya", master_password="123456",master_log_file="master52.000007",master_log_pos=154;

    3)启动slave进程

    mysql>start slave;  

    4)查看进程状态信息

    mysql>show slave statusG;

    Slave_IO_Running:Yes

    Slave_SQL_Running:Yes

    5)在客户端测试主从同步配置52

    在主库服务器上添加访问数据时,使用连接用户//grant all on*.*

    ]#mysql -uroot -p123456

    mysql>grant all on bbsdb.*to webadmin@"%" identified by "123456";

    mysql>select user,host from mysql.user where user="webadmin";

    mysql>quit;

    客户端使用主库的授权用户,连接主库服务器,建库表插入记录

    251]#mysq -h192.168.4.52 -uwebadmin -p123456

    mysql>建库建表插入记录

    在从库本机,使用管理登录查看是否有和主库一样库表记录及授权用户

    52]#mysql -uroot -p123456

    mysql>select * from .表;

    2.4.4客户端使用主库的授权用户,连接从库服务器,也可以看到新建的库表及记录

    253]#mysql -h192.168.4.52 -uwebadmin -p123456

    mysql>select * from .表;

    6)不同步在192.168.4.53

    停止stop slave;

    mysql>stop slave;

    在主库本机上键值

    mysql-uroot-p123456

    mysql>进库进表插入记录

    其他主机上查看,没有插入数据的数据

    192.168.4.53主机上执行

    mysql>start slave;

    其他主机上查看,没有插入数据的数据

    常用配置选项

    主库配置选项

    •适用于Master服务器 选项用途

    binlog_do_db=name设置Master对哪些库记日志

    binlog_ignore_db=name设置Master对哪些库不记日志

    从库配置选项

    •适用于Slave服务器

    选项用途

    log_slave_update记录从库更新,允许链式复制(A-B-C

    relay_log=dbsvr2-relay-bin指定中继日志文件名

    replicate_do_db=mysql仅复制指定库,其他库将被忽略,此选项

    可设置多条(省略时复制所有库)

    replicate_ignore_db=test不复制哪些库,其他库将被忽略,ignore-db do-db只需选用其中一种


    一主多从

    2.1拓扑图

    数据库服务器192.168.4.52做主库

    数据库服务器192.168.4.53做从库

    数据库服务器192.168.4.54做从库

    2.2环境准备

    主从同步未配置之前,要保证从库上要有主库上的数据。

    禁用selinux]#setenforce 0

    关闭防火墙服务]#systemctl stop firewalld

    物理连接正常]#ping -c 2 192.168.4.51/52/53/54

    数据库正常运行,管理可以从本机登录

    2.3配置mysql主从同步

    配置主库192.168.4.52

    a创建用户授权

    b启用binlog日志

    c查看正在使用binlog日志信息

    配置从库192.168.4.53/54

    a验证主库的用户授权

    b指定server_id

    c数据库管理员本机登录,指定主数据库服务器的信息

    mysql>change master to

    ->master_host="主库ip地址",

    ->master_user="主库授权用户名",

    ->master_password="授权用户密码",

    ->master_log_file="主库binlog日志文件名",

    ->master_log_pos=binlog日志文件偏移量;

    d启动slave进程

    e查看进程状态信息

    2.4在客户端测试主从同步配置

    • 在主库服务器上添加访问数据时,使用连接用户
    • 客户端使用主库的授权用户,连接主库服务器,建库表插入记录
    • 在从库本机,使用管理登录查看是否有和主库一样库表记录及授权用户
    • 客户端使用主库的授权用户,连接从库服务器,也可以看到新建的库表及记录

    课外知识: 

    恢复数据库管理员权限

    1)修改配置文件vim /etc/mysql.cnf

    [mysqld]

    skip-grant-tables

    server_id=54

    #validate_password_policy=0

    #validate_password_length=6

    2)重启服务

    [root@host54~]#systemctl restart mysqld

    3)进入数据库

    [root@host54~]#mysqld

    ****修改权限

    mysql>UPDATEmysql.userSET

    select_priv='Y',Insert_priv='Y',Update_priv='Y',Delete_priv='Y',Create_priv='Y',Drop_priv='Y',Reload_priv='Y',File_priv='Y',Grant_priv='Y',References_priv='Y',Index_priv='Y',Alter_priv='Y',Show_db_priv='Y',Super_priv='Y',Create_tmp_table_priv='Y',Lock_tables_priv='Y',Execute_priv='Y',Repl_slave_priv='Y',Repl_client_priv='Y',Create_view_priv='Y',Show_view_priv='Y',Create_routine_priv='Y',Alter_routine_priv='Y',Create_user_priv='Y',Event_priv='Y',Trigger_priv='Y',Create_tablespace_priv='Y'where user="root";

    UPDATE mysql.user SET Shutdown_priv='y'where user="root";

    ****刷新

    mysql>flush privileges;

    4)修改配置文件vim /etc/mysql.cnf

    [mysqld]

    #skip-grant-tables

    server_id=54

    validate_password_policy=0

    validate_password_length=6

    5)重启服务

    [root@host54~]#systemctl restart mysqld

    查看:mysql>show variables like"rpl_semi_sync_%_enabled";

    若是忘记密码

    [sql]view plain copy

    update mysql.user set password=PASSWORD('password')where User='root';

    复制模式介绍

    异步复制(Asynchronous replication)

    主库在执行完客户端提交的事务后会立即将结果返给

    客户端,并不关心从库是否已经接收并处理。

    全同步复制(Fully synchronous replication)

    当主库执行完一个事务,所有的从库都执行了该事务

    才返回给客户端。

    半同步复制(Semisynchronous replication)

    介于异步复制和全同步复制之间,主库在执行完客户

    端提交的事务后不是立刻返回给客户端,而是等待至

    少一个从库接收到并写到relay log(中继日志)中才返回给客户端


    模式配置

    •查看是否允许动态加载模块

    –默认允许

    mysql>show variables like"have_dynamic_loading";

    •命令行加载插件

    –用户需有SUPER权限

    主库:mysql>INSTALL PLUGIN rpl_semi_sync_master

    SONAME'semisync_master.so';

    从库:mysql>INSTALL PLUGIN rpl_semi_sync_slave

    SONAME'semisync_slave.so';

    查看:mysql>SELECT PLUGIN_NAME,PLUGIN_STATUS FROM

    INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME

    LIKE'%semi%';

    •启用半同步复制

    –在安装完插件后,半同步复制默认是关闭的

    :mysql>SET GLOBAL rpl_semi_sync_master_enabled=1;

    :mysql>SET GLOBAL rpl_semi_sync_slave_enabled=1;

    查看:mysql>show variables like"rpl_semi_sync_%_enabled";

    •配置文件永久启用半同步复制

    –命令配置临时配置,重启服务会失效

    –修改后需要重启服务

    –写在主配置文件/etc/my.cnf[mysqld]下方

    :

    plugin-load=rpl_semi_sync_master=semisync_master.so

    rpl_semi_sync_master_enabled=1

    :

    plugin-load=rpl_semi_sync_slave=semisync_slave.so

    rpl_semi_sync_slave_enabled=1

    **************主机有可能做主库也有可能做从库

    •在有的高可用架构下,masterslave需同时启动

    –以便在切换后能继续使用半同步复制

    plugin-load=

    "rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=sems

    ync_slave.so

    rpl-semi-sync-master-enabled=1

    rpl-semi-sync-slave-enabled=1

    ***********************************************************************

  • 相关阅读:
    离线获取docker镜像(docker save vs load)&docker export vs import& docker commit
    深入分析JavaWeb的中文编码问题
    python中Django的基本使用
    element+springboot实现简单的商品管理
    springboot+thymeleaf自定义标签
    springboot整合shiro
    linux的namespace、docker网络模式
    Docker Compose、Swarm 集群管理
    iOS Share Extension 自定义分享界面
    Mixin Messenger 源码解读 1 — — WCDB Swift
  • 原文地址:https://www.cnblogs.com/qingbai/p/12015188.html
Copyright © 2020-2023  润新知