MySQL集群之主从复制环境搭建

安装MySQL

Linux下查看版本信息

  • Linux查看版本当前操作系统内核信息

    
        uname -a
    
        # Linux pinyoyougou-docker 3.10.0-514.el7.x86_64 #1 SMP Tue Nov 22 16:42:41 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
    
  • Linux查看当前操作系统版本信息

    
        cat /proc/version
    
        # Linux version 3.10.0-514.el7.x86_64 (builder@kbuilder.dev.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-11) (GCC) ) #1 SMP Tue Nov 22 16:42:41 UTC 2016
    
  • Linux查看版本当前操作系统发行版信息

        
        cat /etc/issue  
    
        # CentOS Linux release 7.3.1611 (Core)(虚拟机微服务)
    
        cat /etc/redhat-release # 或者
        
        # Red Hat Enterprise Linux Server release 6.4 (Santiago)(192.168.101.39)
    
    
  • Linux查看cpu相关信息,包括型号、主频、内核信息等

```sh

    cat /proc/cpuinfo



```
  • Linux查看版本
```sh

    getconf LONG_BIT
    # 64  (说明当前CPU运行在32bit模式下, 但不代表CPU不支持64bit)

    lsb_release -a # 或者

```

Linux下安装MySQL5.6

  • 安装包介绍

    二进制文件分为两种:一种是不针对特定平台的通用安装方法,使用的二进制文件是后缀为.tar.gz的压缩文件;第二种是使用RPM或其他包进行安装,这种安装进程会自动完成系统的相关配置,本次采用rpm安装包

  • 下载地址

    https://dev.mysql.com/downloads/mysql/

  • 环境准备

    1. MySQL-5.6.44-1.el6.x86_64.rpm-bundle.tar

    2. CentOS7.0.1406操作系统

    3. xshell

  • 安装步骤

    
        # 卸载老版本MySQL
    
        ## 检查系统是否已安装的mysql
        rpm -qa | grep -i mysql
        ## 卸载已安装的mysql
        rpm -e mysql-libs-5.1.66-2.el6_3.x86_64 --nodeps 
        ## --nodeps 表示:不验证套件档的相互关联性
        ## 查找并删除mysql有关的文件
        find / -name mysql
        rm -rf /usr/lib64/mysql ## 删除mysql的数据库
    
    
        # 安装MySQL(rpm方式安装包)
        ## 上传mysql安装包
        /usr/local/mysql
        ## 解压安装包
        tar -xvf  MySQL-5.6.44-1.el6.x86_64.rpm-bundle.tar
    
    
        # 在RHEL系统中,必须先安装"MySQL-shared-compat-5.6.44-1.el6.x86_64.rpm"这个兼容包,然后才能安装server和client,否则安装时会出错
        ## RHEL兼容包
        rpm -ivh MySQL-shared-compat-5.6.44-1.el6.x86_64.rpm  
    
        # 在CentOS7系统下由于自带了mariadb的依赖,需要先将其删除,再依次安装
        ## 查看mariadb依赖
        rpm -qa | grep -i mariadb ## mariadb-libs-5.5.35-3.el7.x86_64
        ## 移除mariadb的依赖
        rpm -e --nodeps mariadb-libs-5.5.35-3.el7.x86_64
    
        ## MySQL服务端程序(我安装这个的时候有个警告,最后加上参数--force --nodeps强制安装的)
        rpm -ivh MySQL-server-5.6.44-1.el6.x86_64.rpm --nodeps --force
        ## MySQL客户端程序
        rpm -ivh MySQL-client-5.6.44-1.el6.x86_64.rpm
        ## MySQL的库和头文件
        rpm -ivh MySQL-devel-5.6.44-1.el6.x86_64.rpm
        ## MySQL的共享库
        rpm -ivh MySQL-shared-5.6.44-1.el6.x86_64.rpm
    
    
  • 注意事项

    安装成功后会提示默认my.cnf地址

修改mysql默认密码

  • 问题描述

        
        # 启动MySQL服务
        service mysql start
    
        ## 报错
        Failed to issue method call: Unit mysql.service failed to load: No such file or directory
    
        ## 原因
        未卸载mariadb依赖,导致MySQL-server数据库服务端安装失败
    
  • 修改步骤

      
        ## 获取MySQL安装时生成的随机密码(ugIGexdBnOhedEHw)
        cat /root/.mysql_secret
    
        ## 启动MySQL服务
        service mysql start
    
        ## 进入MySQL,使用之前获取的随机密码
        mysql -uroot -p
    
        ## 在MySQL命令行中设置root账户的密码为123456
        SET PASSWORD FOR 'root'@'localhost' = PASSWORD('123456');
    
        ## 退出MySQL命令行
        quit
    
        ## 重新启动MySQL服务
        service mysql restart
    
    

MySQL设置远程访问

  • 问题描述

    远程连接mysql时,提示:is not allowed to connect this MySQL server

    原因:在数据库服务器中的mysql数据库中的user的表中没有权限(也可以说没有用户)

  • 设置步骤

    
        # 设置远程访问
        ## 连接服务器
        mysql -u root -p
      
        ## 看当前所有数据库:
        show databases
    
        ## 进入mysql数据库:
        use mysql
    
        ## 查看mysql数据库中所有的表:
        show tables
    
        ## 查看user表中的数据:
        select Host, User, Password from user
    
        ## 修改user表中的Host:
        update user set Host='%' where User='root'
        update user set Host='%' where Host='localhost' 
    
        ## 或者
        GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
    
        ## 最后刷新一下:
        flush privileges
    
    
  • 注意事项

    https://www.csdn.net/gather_29/MtTaIg1sNzE0OS1ibG9n.html

    可能由于防火墙或者端口号不匹配导致不能使用远程客户端连接MySQL,但是在命令行可以连接

MySQL主从复制配置

环境准备

  • 服务器准备

    Master(192.168.159.134)和 Slave(192.168.159.133) 注意:两台数据库服务器的的 selinux 都要 disable(永久关闭 selinux,请 修改/etc/selinux/config,将 SELINUX 改为 disabled)

    本次安装并没有关闭,也能正常安装

  • MySQL准备

    Master 和 Slave 都创建数据库 mbank,表 user

    
        create database if not exists mbank default charset utf8 collate utf8_general_ci;
    
        use mbank;
    
        DROP TABLE IF EXISTS `user`;
    
        CREATE TABLE `user` (
        `Id` int(11) NOT NULL AUTO_INCREMENT,
        `user_name` varchar(255) NOT NULL DEFAULT '' COMMENT '用户名',
        `pwd` varchar(255) NOT NULL DEFAULT '' COMMENT '密码',
        PRIMARY KEY (`Id`)
        ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COMMENT='用户信息表';
    
    
    

Master

  • Master端配置

    
    
        # 修改Master的MySQL配置文件 /etc/my.cnf
        ## MySQL服务器安装在/usr目录下,只有/usr/my.cnf文件
        vim /usr/my.cnf
    
        # 在 [mysqld] 中增加以下配置项
        # 设置 server_id,一般设置为 IP
        server_id=134
        # 复制过滤:需要备份的数据库,输出 binlog
        binlog-do-db=mbank
        # 复制过滤:不需要备份的数据库,不输出(mysql 库一般不同步)
        binlog-ignore-db=mysql
        # 开启二进制日志功能,可以随便取,最好有含义
        log-bin=edu-mysql-bin
        # 为每个 session 分配的内存,在事务过程中用来存储二进制日志的缓存
        binlog_cache_size=1M
        # 主从复制的格式(mixed,statement,row,默认格式是 statement)
        binlog_format=mixed
        # 二进制日志自动删除/过期的天数。默认值为 0,表示不自动删除。
        expire_logs_days=7
        # 跳过主从复制中遇到的所有错误或指定类型的错误,避免 slave 端复制中断。
        # 如:1062 错误是指一些主键重复,1032 错误是因为主从数据库数据不一 致
        slave_skip_errors=1062
        # 如果需要同步函数或者存储过程
        log_bin_trust_function_creators=true
    
    
  • Master数据库服务配置

        # 重启Master数据库服务
        service  mysql  restart
    
        # root用户登录数据库
        mysql  -uroot  -p
    
        # 创建数据同步用户,并授予相应的权限 
        ## 这里ip配置的是从库ip地址
        grant  replication  slave,  replication  client  on  *.*  to  'nifc'@'192.168.159.133'  identified  by  '123456';
    
        # 刷新授权表信息
        flush  privileges;
    
        # 查看 MySQL 现在有哪些用户及对应的 IP 权限
        select user, host from mysql.user;
       
        # 查看 position 号,记下 position 号(从机上需要用到这个 position 号和现 在的日志文件)
        show master status;
        
        ##Master 重启后会修改 mysql-bin 文件名(序号加 1) 
    

Slave

  • Slave端配置

    
        # 设置 server_id,一般设置为 IP
        server_id=133
        # 复制过滤:需要备份的数据库,输出 binlog
        binlog-do-db=mbank
        #复制过滤:不需要备份的数据库,不输出(mysql 库一般不同步)
        binlog-ignore-db=mysql
        # 开启二进制日志,以备 Slave 作为其它 Slave 的 Master 时使用
        log-bin=edu-mysql-slave1-bin
        # 为每个 session 分配的内存,在事务过程中用来存储二进制日志的缓存
        binlog_cache_size = 1M
        # 主从复制的格式(mixed,statement,row,默认格式是 statement)
        binlog_format=mixed
        # 二进制日志自动删除/过期的天数。默认值为 0,表示不自动删除。
        expire_logs_days=7
        # 跳过主从复制中遇到的所有错误或指定类型的错误,避免 slave 端复制中 断。
        # 如:1062 错误是指一些主键重复,1032 错误是因为主从数据库数据不一 致
        slave_skip_errors=1062
        #  relay_log 配置中继日志
        relay_log=edu-mysql-relay-bin
        #  log_slave_updates 表示 slave 将复制事件写进自己的二进制日志
        ## 当设置 log_slave_updates 时,你可以让 slave 扮演其它 slave 的 master。 此时,slave 把 SQL 线程执行的事件写进行自己的二进制日志 (binary  log), 然后,它的 slave 可以获取这些事件并执行它
        log_slave_updates=1
        # 防止改变数据(除了特殊的线程)
        read_only=1
    
    
  • 配置Slave数据库

    
        # 保存后重启MySQL服务,还原备份数据
        service  mysql  restart
    
        
        # 在master那边,执行
        ## flush logs命令的作用就是关闭当前使用的binary log,然后打开一个新的binary log文件,文件的序号加1.
        flush logs;
    
        ## 记下File, Position
        show master status;
    
        # 在slave端,执行
        ## 暂停slave状态(也可不执行)
        stop slave;
    
        ## 登录mysql
        mysql  -uroot  -p
    
        ## 此处的master_log_file的值为上面查询的file值,master_log_pos为Position值。
        mysql>  change  master  to  master_host='192.168.159.134',  master_user='nifc',  master_password='123456',  master_port=3306,  master_log_file=' edu-mysql-bin.000001',  master_log_pos=1872,  master_connect_retry=30;
    
        ## 查看主从同步状态 
        mysql> show  slave  status\G;
        ## 可看到 Slave_IO_State 为空, Slave_IO_Running 和 Slave_SQL_Runnin g 是 No,表明 Slave 还没有开始复制过程。
    
        ## 开启主从同步
        mysql> start  slave;
    
        ## 再查看主从同步状态
        mysql> show  slave  status\G;
      
    
        ## 注意:保证各个db的uuid不一样
        ## 找到每个实例下data文件夹下的auto.cnf文件,修改里面的uuid值,保证各个db的uuid不一样,重启db即可
        find -name auto.cnf ## 本地存放目录 /var/lib/mysql
    
    
  • 注意事项

    MySQL主从同步状态异常1236
    MySQL查看主从同步状态信息

        ## 报错信息:Got fatal error 1236 from master when reading data from binary log: ‘Could not find first log file name in binary log index file’
    
        ## 解决方案
        stop slave;
    
        reset slave;
    
        start slave;
    
    

测试主从同步

  • Master新增测试数据

    -- 创建mbank库、表,并写入一定量的数据,用于模拟现有的业务系统数据库 
    INSERT INTO `user` (user_name, pwd) VALUES ('yzr','123456'),('test','123456'),('you','654321');

查看Slaver中是否同步新增数据

参考链接

  • MySQL安装包介绍

    https://zzjlogin.github.io/Server/linux-server/mysql/0012mysql_package.html

  • Centos7下安装mysql5.6

    https://blog.csdn.net/java_lais/article/details/80921556

  • MySQL实现主从复制/主从同步

    https://www.jianshu.com/p/19cb0f16dea4

  • MySQL集群(一)之主从复制

    https://www.cnblogs.com/yixiaogo/p/11300514.html

  • 搭建MySQL5.6主从复制

    https://blog.csdn.net/YZR_JAVA/article/details/87115028

  • MySQL5.6主从复制最佳实践

    https://www.cnblogs.com/xhyan/p/6598992.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值