网站首页 > 数据编程 正文
说明:学习该文档你需提前具备的能力:MySQL 5.7.17源码安装经验
MySQL 5.7版本之前的最常见的复制方式,一主一从或者一主多从的架构
MySQL 5.7之后就可以实现多主一从的复制:
多主单从架构好处:
一、在从服务器进行数据汇总,如果我们的主服务器进行了分库分表的操作,为了实现后期的一些数据统计功能,往往需要把数据汇总在一起再统计。
二、如果我们想在从服务器时时对主服务器的数据进行备份,在MySQL 5.7之前每一个主服务器都需要一个从服务器,这样很容易造成资源浪费,同时也加大了DBA的维护成本,但MySQL 5.7引入多源复制,可以把多个主服务器的数据同步到一个从服务器进行备份。
需要注意的地方:
master 复制到slave上不能有同名的库,比如master 1 上面有test库 如果test2上也有test库那么复制到slave那么将会出错。
环境准备:
DB:MySQL 5.7.17
OS:Centos 6.7x64
规划:
hostname 依据你自己的规划,IP 也已经你的规划,OS 是6.7 我这里因为用的是公司剩余的老机器所以IP 和 hostname 都未做变更,但是网络是互相打通的。
其他配置:
关闭iptables
【命令】
[root@ Zabbixdb] /etc/init.d/iptables stop
[root@ Zabbixdb]chkconfig iptables off
[root@ Zabbixdb]chkconfig --list|grep iptables
iptables 0:off 1:off 2:off 3:off 4:off 5:off 6:off
主机EvunMonitor:
[root@ EvunMonitor] /etc/init.d/iptables stop
[root@ EvunMonitor]chkconfig iptables off
[root@ EvunMonitor]chkconfig --list|grep iptables
iptables 0:off 1:off 2:off 3:off 4:off 5:off 6:off
主机oracle12c:
[root@ oracle12c] /etc/init.d/iptables stop
[root@ oracle12c]chkconfig iptables off
[root@ oracle12c]chkconfig --list|grep iptables
iptables 0:off 1:off 2:off 3:off 4:off 5:off 6:off
关闭selinux
修改/etc/selinux/config
【命令】
主机zabbixdb、EvunMonitor、oracle12c
[root@ Zabbixdb] sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
[root@ EvunMonitor] sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
[root@ oracle12c] sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
重启服务器:
【命令】
主机zabbixdb、EvunMonitor、oracle12c
[root@ Zabbixdb] reboot
[root@ EvunMonitor]reboot
[root@ oracle12c] reboot
安装MySQL:
安装文档详细见:mysql 5.7.17源码安装.pdf
三台机器全部安装好mysql
修改my.cnf
【命令】
[zabbixdb] more /etc/my.cnf
max_connections=3000
lower_case_table_names=1
innodb_buffer_pool_size=24576M
log-bin=binlog
server_id=1
binlog_format=ROW
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
general_log=on
gtid_mode=ON
enforce_gtid_consistency = ON
[EvunMonitor] more /etc/my.cnf
innodb_buffer_pool_size=8589934592
max_connections=3000
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
log-bin=binlog
server_id=2
binlog_format=ROW
general_log=on
gtid_mode=on
enforce_gtid_consistency = ON
[oracle12c] more /etc/my.cnf
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
log-bin=binlog
server_id=3
binlog_format=ROW
general_log=on
gtid_mode=on
enforce_gtid_consistency = ON
重启mysql server
【命令】
[zabbixdb] /etc/init.d/mysqld restart
[EvunMonitor] /etc/init.d/mysqld restart
[oracle12c] /etc/init.d/mysqld restart
初始化准备:
在Zabbixdb(master1)和EvunMonitor(master2)上创建数据库 模拟生产环境原有数据
【命令】
[zabbixdb]mysql -uroot -p
mysql>create database zabbixdb;
mysql>use zabbixdb;
mysql>create table zab(age int);
mysql>insert into zab values(1);
[EvunMonitor]mysql -uroot -p
mysql>create database evunmonitor;
mysql>use evunmonitor;
mysql>create table evun(age int);
mysql>insert into evun values(2);
在Zabbixdb(master1)和EvunMonitor(master2) 上 导出我们刚才创建的数据库 要拿发送到slave上去初始化数据。(这里使用mysqldump 是因为数据量少如果是几十G 几百G的化那么使用xtrabackup 或者mysqlEB 更可行)
【命令】
[zabbixdb]mysqldump -uroot -ppassword --master-data=2 --single-transaction --databases --add-drop-database zabbixdb >zabbixdb.sql
[zabbixdb] scp zabbixdb.sql root@10.86.87.161:/opt
[EvunMonitor]mysqldump -uroot -ppassword --master-data=2 --single-transaction --databases --add-drop-database evunmonitor >evunmonitor.sql
[EvunMonitor] scp evunmonitor.sql root@10.86.87.161:/opt
搭建主从结构:
创建复制账号:
【命令】
[zabbixdb] grant replication slave on *.* to 'repl'@'10.86.87.161' identified by 'repl';
[EvunMonitor] grant replication slave on *.* to 'repl'@'10.86.87.161' identified by 'repl';
导入刚才备份数据入slave库:
在导入前先修改MySQL存储master-info和relay-info的方式,即从文件存储改为表存储,在my.cnf里添加以下选项:
master_info_repository=TABLE
relay_log_info_repository=TABLE
[oracle12c] more /etc/my.cnf
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
log-bin=binlog
server_id=3
binlog_format=ROW
general_log=on
gtid_mode=on
enforce_gtid_consistency = ON
master_info_repository=TABLE
relay_log_info_repository=TABLE
【命令】
[oracle12c] mysql -uroot -ppassword <zabbixdb.sql;
[oracle12c]mysql -uroot -ppassword
mysql>reset master #没有这一步后面再导入会出错因为启用了GTID 模式。
[oracle12c] mysql -uroot -ppassword <evunmonitor.sql
分别找出zabbixdb和EvunMonitor的binlog位置和Pos位置:
【命令】
[root@oracle12c 15:51:24]$cat zabbixdb.sql |grep " CHANGE MASTER"
-- CHANGE MASTER TO MASTER_LOG_FILE='binlog.000003', MASTER_LOG_POS=759;
[root@oracle12c 15:51:32]$cat evunmonitor.sql |grep " CHANGE MASTER"
-- CHANGE MASTER TO MASTER_LOG_FILE='binlog.000003', MASTER_LOG_POS=782;
同步操作:
登录Slave进行同步操作,分别change master到两台Master服务器,后面以FOR CHANNEL 'CHANNEL_NAME'区分。
【命令】
[root@oracle12c 15:51:32]mysql -uroot -ppassword
mysql>CHANGE MASTER TO MASTER_HOST='10.86.86.72', MASTER_USER='repl', MASTER_PASSWORD='repl',MASTER_LOG_FILE='binlog.000003',MASTER_LOG_POS=759 FOR CHANNEL 'zabbixdb';
Query OK, 0 rows affected, 2 warnings (0.05 sec)
mysql>CHANGE MASTER TO MASTER_HOST='10.86.93.191',MASTER_USER='repl', MASTER_PASSWORD='repl',MASTER_LOG_FILE='binlog.000003',MASTER_LOG_POS=782 FOR CHANNEL 'EvunMonitor';
Query OK, 0 rows affected, 2 warnings (0.06 sec)
启动复制进程有两种方式:直接start slave 和启动单个复制源的方式
【命令】
[root@oracle12c 16:01:20]mysql -uroot -ppassword
mysql>start slave;
单个启动
mysql>start slave for channel 'zabbixdb';
mysql>start slave for channel 'EvunMonitor';
查看状态:
正常启动后,可以查看同步的状态:
执行SHOW SLAVE STATUS FOR CHANNEL 'zabbixdb'\G
执行SHOW SLAVE STATUS FOR CHANNEL 'EvunMonitor'\G
验证:
【命令】
[zabbixdb@root]#mysql -uroot -ppassword
mysql> use zabbixdb;
mysql> insert into zab values(3);
Query OK, 1 row affected (0.07 sec)
mysql> commit;
Query OK, 0 rows affected (0.00 sec)
[root@EvunMonitor ~]# mysql -uroot -ppassword
mysql> use evunmonitor;
mysql> insert into evun values(4);
Query OK, 1 row affected (0.02 sec)
mysql> commit;
Query OK, 0 rows affected (0.00 sec)
到slave 上去验证:
Database changed
mysql> select * from zabbixdb.zab;
+------+
| age |
+------+
| 1 |
| 3 |
+------+
2 rows in set (0.00 sec)
mysql> select * from evunmonitor.evun;
+------+
| age |
+------+
| 2 |
| 4 |
+------+
2 rows in set (0.00 sec)
猜你喜欢
- 2024-10-01 MYSQL进阶优化之配置文件调优分享!
- 2024-10-01 使用RDS和本地mysql做主从同步,实现多服务器数据同步
- 2024-10-01 MySQL5.7在线无锁添加Slave节点—xtrabackup在线备份方式
- 2024-10-01 分分钟搭建MySQL GR测试环境 mysqlmgr搭建
- 2024-10-01 MySQL 8.0 高可用集群之MGR(组复制)
- 2024-10-01 没有宫廷内斗,数据库界的延禧攻略
- 2024-10-01 云计算实战:主从复制 主从复制是集群吗
- 2024-10-01 MySQL主从复制,你还不了解吗? mysql 主从复制
- 2024-10-01 mysql的主从复制延迟问题——看这一篇就够了
- 2024-10-01 一篇文带你解决mysql的主从复制延迟问题
- 最近发表
- 标签列表
-
- 快照读和当前读 (52)
- mysqlipv6 (52)
- oraclepdb (60)
- cad2020破解 (52)
- jdbcoracleurl (54)
- vncviewermac (62)
- sqlservermax (58)
- mysqlcanal (61)
- mysql:commandnotfound (56)
- mysqlexplainfiltered (56)
- python位运算符 (59)
- sqlserver模糊查询 (53)
- ethtool-g (50)
- linuxfind-name模糊查询文件 (60)
- centos7systemctl (76)
- mysqlgt (55)
- nc命令 (66)
- dockerfilecp (55)
- rockstor (50)
- permitrootlogin (55)
- modifycolumn (52)
- 单行子查询返回多个行解决办法 (58)
- mysql字符串函数 (53)
- ssh-2.0-openssh_7.4 (56)
- maxsurge (52)