MySQL主从复制

本文详细介绍了在 CentOS 上安装 Mariadb 的步骤,包括配置 yum 源,安装 mariadb-server,以及如何配置 mariadb 支持中文。此外,还深入讲解了 mariadb 的主从同步配置过程,包括在两台 Linux 机器间以及 Windows 和 Linux 间的主从同步设置。

配置yum源工具

  • 1.备份原来仓库文件
        cd /etc/yum.repos.d/ 
    mkdir  allbak 
    mv ./*  allbak 
    #此时 /etc/yum.repos.d/底下就没有repo文件,此时无法使用yum工具,必须配置yum源,生成新的.repo文件
        
  • 2.下载第一个阿里云仓库文件
        wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
        # -O  参数 ,指定一个下载地址,且改名
  • 3.配置第二个仓库文件 epel 额外仓库(redis,nginx,mongo,ipython)
        wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
  • 4.清空原本yum缓存
        yum clean all
  • 5.生成新的阿里云的yum缓存,加速下载预热数据
        yum  makecache

centos安装mariadb

centos7  mariadb的学习
1.在linux上安装软件的方式
    -yum安装  在线搜索rpm格式的软件包,进行自动的依赖关系处理,下载,安装
    (阿里云的yum仓库,里面的软件都是阿里云运维工程师定义的)
        yum install mysql -y 
    -手动rpm包安装 ,需要手动解决N个软件依赖 
        -rpm -ivh  mysqlxx.rpm  
    -源码编译安装(这种方式是企业应用最多的)
        (可以自定制软件的版本,以及可以最优先的使用最新版本软件)

2.yum源的配置(mysql的yum源)
    1.在线下载阿里云的 yum 仓库,以及epel仓库 
        CentOS-Base.repo  epel.repo
    2.安装mysql的方式
        yum install mysql-server  mysql -y  
        yum install mariadb-server  mysql -y (下面这一行才是对的) 


    3.安装mysql的方式也有2种,阿里云官方提供的mariadb软件包,版本可能太低,但是下载网速很快,方便学习使用
    
    4.在企业里面,多半不会使用阿里云的mariadb版本,因为版本太低,安全性太低,公司会配置myariadb官方的yum仓库 
        1.手动创建mariadb的仓库文件
            touch Mariadb.repo
        2.写入配置信息
            [mariadb]
            name = MariaDB
            baseurl = http://yum.mariadb.org/10.1/centos7-amd64
            gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
            gpgcheck=1
        3.尝试安装最新版本mariadb
            cat
    
    5.使用mysql,启动
    systemctl start mariadb 
    
    6.初始化数据库
    mysql_secure_installation
    
    7.配置数据库的中文支持
        1.修改mysql的配置文件,支持中文编码
        
        cat /etc/my.cnf  和我一致就行 
            [mysqld]
            character-set-server=utf8
            collation-server=utf8_general_ci
            log-error=/var/log/mysqld.log
            datadir=/var/lib/mysql
            socket=/var/lib/mysql/mysql.sock
            # Disabling symbolic-links is recommended to prevent assorted security risks
            symbolic-links=0
            # Settings user and group are ignored when systemd is used.
            # If you need to run mysqld under a different user or group,
            # customize your systemd unit file for mariadb according to the
            # instructions in http://fedoraproject.org/wiki/Systemd

            [client]
            default-character-set=utf8

            [mysql]
            default-character-set=utf8
        2.在服务器上,修改了配置文件,都要重启数据库服务
        systemctl restart mariadb 
        
        3.在utf8编码下,配置mariadb
            show create table stu;
            show create database s16;
            
    8.在远程用 mysql客户端去连接服务端,方式有哪些
        1.navicat
        2.cmd  
            mysql  -uroot -p  -h 192.168.15.53
        3. pycharm 
        4.pymysql  python
        5.orm  django
        
    9.配置mysql支持远程连接的sql语句
        授权mariadb远程连接
        #授予root用户对所有的库表所有的权限,在所有的机器上操作,皆可登录
        grant all privileges on *.* to root@'%' identified by 'centos';
    
        刷新授权表:
        flush privileges;

    10.数据库备份操作
        mysqldump -u root -p --all-databases > /tmp/db.dump
        数据导入,方式有2种
        1.mysql -uroot -p  <  /tmp/db.dump 
        2.进入mysql命令行,输入source /tmp/db.dump 

主从原理

  • master将改变的数 记录在本地的 二进制日志中(binary log) ;该过程 称之为:二进制日志件事
  • slave将master的binary log拷贝到自己的 relay log(中继日志文件)中
  • 中继日志事件,将数据读取到自己的数据库之中
    1626051-20190606105021631-78871648.png
    1626051-20190606105031478-1748649155.png

两个Linux之间进行主从同步

mysql主从同步技术
    1.环境准备,准备2台机器,一个master 一个slave 
        192.168.15.53  主库 
        192.168.15.94  从库
        
    2.配置主库的环境
        1.修改主库的配置文件,开启binlog功能
            vim /etc/my.cnf
            [mysqld]
            server-id=1
            log-bin=s16-mysql-bin

        2.重启数据库
        systemctl restart mariadb
    3.创建用于数据同步的账号
    create user 'banzhang'@'%' identified by 'bz666';
    
    4.授予这个账号,一个slave的身份标识
    grant replication slave on *.* to 'banzhang'@'%';
    
    5.锁表
    flush table with read lock
    
    6.数据库信息导出
    mysqldump -uroot -p >  --all-databases   /opt/db.dump  
    
    
    
在mariadb从库的操作
    1.阿里云的源,和官方源,同一安装软件包名如下 
    yum install mariadb-server mariadb -y  
    
    
    2.配置从库的配置文件,开启server-id 
    vim /etc/my.cnf 
        写入如下操作
        [mysqld]
        server-id=3
        read-only=true

        character-set-server=utf8
        collation-server=utf8_general_ci
        log-error=/var/log/mysqld.log
    3.重启数据库
    systemctl restart mariadb 

    4.在从库,通过一条命令,开启主从同步
    mysql > change master to master_host='192.168.15.53',
    master_user='banzhang',
    master_password='bz666',
    master_log_file='s16-mysql-bin.000001',
    master_log_pos=568;
    
    5.开启slave同步
    start slave ;
    
    6.检查主从同步状态
    show slave status\G 
    当你检查这2条参数,yes的时候,主从ok
    
    Slave_IO_Running: Yes
    Slave_SQL_Running: Yes

    
此时解锁主库!!
此时解锁主库!!
此时解锁主库!!


    
验证主从同步是否正常 

windows和Linux之间主从同步(windows是主,Linux是从)

```
windows:mysql 主
linux:mysql从

安装windows版mysql:
    如果之前计算机中安装过Mysql,要重新再安装  则需要:先卸载 再安装
    先卸载:
        通过电脑自带卸载工具卸载Mysql (电脑管家也可以)
        删除一个mysql缓存文件C:\ProgramData\MySQL
        删除注册表regedit中所有mysql相关配置
        --重启计算机
        
    安装MYSQL:
        安装时,如果出现未响应:  则重新打开D:\MySQL\MySQL Server 5.5\bin\MySQLInstanceConfig.exe

    图形化客户端: SQLyog, Navicat


    如果要远程连接数据库,则需要授权远程访问。 
    授权远程访问 :(A->B,则再B计算机的Mysql中执行以下命令)
    GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;
    FLUSH PRIVILEGES;

    如果仍然报错:可能是防火墙没关闭 :  在B关闭防火墙  service iptables stop 



实现主从同步(主从复制):图
    1.master将改变的数 记录在本地的 二进制日志中(binary log) ;该过程 称之为:二进制日志件事
    2.slave将master的binary log拷贝到自己的 relay log(中继日志文件)中
    3.中继日志事件,将数据读取到自己的数据库之中
MYSQL主从复制 是异步的,串行化的, 有延迟

master:slave = 1:n

配置: 
windows(mysql: my.ini)
  linux(mysql: my.cnf)

配置前,为了无误,先将权限(远程访问)、防火墙等处理:
    关闭windows/linux防火墙: windows:右键“网络”   ,linux: service iptables stop
    Mysql允许远程连接(windowos/linux):
        GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;
        FLUSH PRIVILEGES;

主机(以下代码和操作 全部在主机windows中操作):
my.ini
[mysqld]

id

server-id=1

二进制日志文件(注意是/ 不是)

log-bin="D:/MySQL/MySQL Server 5.5/data/mysql-bin"

错误记录文件

log-error="D:/MySQL/MySQL Server 5.5/data/mysql-error"

主从同步时 忽略的数据库

binlog-ignore-db=mysql

(可选)指定主从同步时,同步哪些数据库

binlog-do-db=test

windows中的数据库 授权哪台计算机中的数据库 是自己的从数据库:
GRANT REPLICATION slave,reload,super ON . TO 'root'@'192.168.0.102' IDENTIFIED BY 'root';
flush privileges ;

查看主数据库的状态(每次在左主从同步前,需要观察 主机状态的最新值)
    show master status;  (mysql-bin.000001、 107)

从机(以下代码和操作 全部在从机linux中操作):

my.cnf
[mysqld]
server-id=2
log-bin=mysql-bin
replicate-do-db=test

linux中的数据 授权哪台计算机中的数控 是自己的主计算机
CHANGE MASTER TO
MASTER_HOST = '192.168.0.103',
MASTER_USER = 'root',
MASTER_PASSWORD = 'root',
MASTER_PORT = 3306,
master_log_file='mysql-bin.000002',
master_log_pos=1126;
如果报错:This operation cannot be performed with a running slave; run STOP SLAVE first
解决:STOP SLAVE ;再次执行上条授权语句

开启主从同步:
从机linux:
start slave ;
检验 show slave status \G
主要观察: Slave_IO_Running和 Slave_SQL_Running,确保二者都是yes;如果不都是yes,则看下方的 Last_IO_Error。
本次 通过 Last_IO_Error发现错误的原因是 主从使用了相同的server-id,
检查:在主从中分别查看serverid: show variables like 'server_id' ;
可以发现,在Linux中的my.cnf中设置了server-id=2,但实际执行时 确实server-id=1,
原因:可能是 linux版Mysql的一个bug,也可能是 windows和Linux版本不一致造成的兼容性问题。
解决改bug: set global server_id =2 ;

stop slave ;
 set global server_id =2 ;
start slave ;
 show slave status \G

演示:
主windows =>从

windows:
将表,插入数据  
观察从数据库中该表的数据

```1626051-20190606105025803-1328839644.png

转载于:https://www.cnblogs.com/gaofeng-d/p/10983313.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值