热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

MariaDB10Multi-MasterReplication测试

MySQL5.7和MariaDB10提供了Multi-Master复制的功能,并在复制性能上有所改善。对比上一篇Master-Standy的配置,本文将测试一下Multi-Master的配置。Multi-Master复制通常是环形复制,可以在任意主机上将数据复制给其他主机。1.安装MariaDBmariaDB为Re

MySQL 5.7和MariaDB 10提供了Multi-Master复制的功能,并在复制性能上有所改善。对比上一篇Master-Standy的配置,本文将测试一下Multi-Master的配置。 Multi-Master 复制通常是环形复制,可以在任意主机上将数据复制给其他主机。 1. 安装MariaDB mariaDB为Re

MySQL 5.7和MariaDB 10提供了Multi-Master复制的功能,并在复制性能上有所改善。对比上一篇Master-Standy的配置,本文将测试一下Multi-Master的配置。
Multi-Master 复制通常是环形复制,可以在任意主机上将数据复制给其他主机。
03083656_z81R

1. 安装MariaDB

mariaDB为Redhat/CentOS提供了yum源的方式安装。登下下面的链接就可以选择对应平台的repo配置:
https://downloads.mariadb.org/mariadb/repositories/#mirror=tsinghua
那么我这里环境是2台CentOS 6.5的虚拟机:
OStack01 192.168.1.132
OStack02 192.168.1.133
获得的repo信息如下:

# vim /etc/yum.repos.d/MariaDB.repo
# MariaDB 10.0 CentOS repository list - created 2014-05-02 15:17 UTC
# http://mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.0/centos6-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1

配置好repo之后,使用yum安装即可。这里还需要安装MariaDB-client的包才有会mysql, mysqladmin等客户端工具。

# yum search MariaDB
Loaded plugins: fastestmirror, refresh-packagekit, security
Loading mirror speeds from cached hostfile
 * base: centos.ustc.edu.cn
 * epel: ftp.sjtu.edu.cn
 * extras: centos.ustc.edu.cn
 * updates: centos.ustc.edu.cn
epel/pkgtags                                             | 1.0 MB     00:07     
============================= N/S Matched: MariaDB =============================
MariaDB-Galera-server.x86_64 : MariaDB: a very fast and robust SQL database
                             : server
MariaDB-cassandra-engine.x86_64 : MariaDB: a very fast and robust SQL database
                                : server
MariaDB-client.x86_64 : MariaDB: a very fast and robust SQL database server
MariaDB-common.x86_64 : MariaDB: a very fast and robust SQL database server
MariaDB-compat.x86_64 : MariaDB: a very fast and robust SQL database server
MariaDB-connect-engine.x86_64 : MariaDB: a very fast and robust SQL database
                              : server
MariaDB-devel.x86_64 : MariaDB: a very fast and robust SQL database server
MariaDB-oqgraph-engine.x86_64 : MariaDB: a very fast and robust SQL database
                              : server
MariaDB-server.x86_64 : MariaDB: a very fast and robust SQL database server
MariaDB-shared.x86_64 : MariaDB: a very fast and robust SQL database server
MariaDB-test.x86_64 : MariaDB: a very fast and robust SQL database server
innotop.noarch : A MySQL and InnoDB monitor program
  Name and summary matches only, use "search all" for everything.
# yum install -y MariaDB-server MariaDB-client
......
Dependencies Resolved
================================================================================
 Package               Arch          Version               Repository      Size
================================================================================
Installing:
 MariaDB-compat        x86_64        10.0.10-1.el6         mariadb        2.7 M
     replacing  mysql-libs.x86_64 5.1.71-1.el6
 MariaDB-server        x86_64        10.0.10-1.el6         mariadb         52 M
Installing for dependencies:
 MariaDB-common        x86_64        10.0.10-1.el6         mariadb         23 k
 perl-DBI              x86_64        1.609-4.el6           base           705 k
Transaction Summary
================================================================================
Install       4 Package(s)
Total download size: 55 M
...
Installed:
  MariaDB-compat.x86_64 0:10.0.10-1.el6               MariaDB-server.x86_64 0:10.0.10-1.el6              
Dependency Installed:
  MariaDB-common.x86_64 0:10.0.10-1.el6                   perl-DBI.x86_64 0:1.609-4.el6

下面初始化并启动数据库。

# mysql_install_db --user=mysql
Installing MariaDB/MySQL system tables in '/var/lib/mysql' ...
......
# service mysql start
Starting MySQL. SUCCESS! 
# mysql_secure_installation
Enter current password for root (enter for none): 
OK, successfully used password, moving on...
Set root password? [Y/n] Y
New password: 
Re-enter new password: 
Password updated successfully!
Reloading privilege tables..
 ... Success!
Remove anonymous users? [Y/n] Y
 ... Success!
Disallow root login remotely? [Y/n] Y
 ... Success!
Remove test database and access to it? [Y/n] n
 ... skipping.
Reload privilege tables now? [Y/n] Y
 ... Success!
Cleaning up...
All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.
Thanks for using MariaDB!

2. 配置参数文件

在参数文件/etc/my.cnf中,除了配置不同的server-id之外,下面的配置也是非常有用的。
vim /etc/my.cnf
log_bin = mysql-bin
thread_cOncurrency= 2
thread_concurrency视服务器的CPU数量设置,通常为CPU# * 2;
innodb_file_per_table = 1
innodb_open_files=800

InnoDB 默认会将所有的数据库InnoDB引擎的表数据存储在一个共享空间中:ibdata1,这样就感觉不爽,增删数据库的时候,ibdata1文件不会自动收缩,单个数据库的备份也将成为问题,通常只能将数据使用mysqldump 导出,然后再导入解决这个问题。
当innodb数据量足够大时,共享表空间文件已经能够不合适。这时需要修改mysql配置文件的[mysqld] – innodb_file_per_table参数,可将InnoDB设为独立表空间模式,这样之后创建的每个数据库的每个表都会生成一个数据空间。
如果需要对现有表使用独享表空间,则需要alter table xxx engine=innodb;让表重新生成一次。
使用独立表空间有下面优点:
1.每个表都有自已独立的表空间。
2.每个表的数据和索引都会存在自已的表空间中。
3.可以实现单表在不同的数据库中移动。
4.空间可以回收(drop/truncate table方式操作表空间不能自动回收)
5.对于使用独立表空间的表,在进行频繁delete处理后,表空间的碎片不会造成严重的性能损失,可以在后面单独优化。
缺点:
单表增加比共享空间方式更大。共享表在Insert操作时有一些优势。
查看参数
show variables like ‘%per_table%’;
innodb默认打开的文件数量innodb_open_files是300,当启用了innodb_file_per_table后,这个值应该设置的足够大。

relay-log=relay-binlog 中继日志的存储位置及命名方式
auto-increment-offset=1 自动增长类型的初始值
auto-increment-increment=2 自动增长类型的步长

然后启动数据库

/etc/init.d/mysql start
MariaDB [(none)]> select version();
+---------------------+
| version()           |
+---------------------+
| 10.0.10-MariaDB-log |
+---------------------+
1 row in set (0.00 sec)

3. 配置Multi-Master复制

首先查一下两边当前的logfile和position(这里省略了数据初始化的过程):

--OStack01
MariaDB [(none)]> show master statusG
*************************** 1. row ***************************
            File: mysql-bin.000010
        Position: 326
    Binlog_Do_DB: 
Binlog_Ignore_DB: 
1 row in set (0.00 sec)
--OStack02
MariaDB [(none)]> show master statusG
*************************** 1. row ***************************
            File: mysql-bin.000005
        Position: 326
    Binlog_Do_DB: 
Binlog_Ignore_DB: 
1 row in set (0.00 sec)

配置第一个节点的master为第二个节点,然后启动slave

--OStack01
MariaDB [(none)]> change master to master_host='192.168.1.133',master_user='debugo',master_password='debugo',master_log_file='mysql-bin.000010',master_log_pos=326;
MariaDB [(none)]> start slave;
--log-error
/var/log/mysqld.log
140502 20:40:52 [Note] 'CHANGE MASTER TO executed'. Previous state master_host='', master_port='3306', master_log_file='', master_log_pos='4'. New state master_host='192.168.1.133', master_port='3306', master_log_file='mysql-bin.000010', master_log_pos='326'.
140502 20:41:14 [Note] Slave SQL thread initialized, starting replication in log 'mysql-bin.000010' at position 326, relay log './ostack01-relay-bin.000001' position: 4
140502 20:41:14 [Note] Slave I/O thread: connected to master 'debugo@192.168.1.133:3306',replication started in log 'mysql-bin.000010' at position 326

同样配置第二个节点的master为第一个节点:

--OStack02
MariaDB [(none)]> change master to master_host='192.168.1.132',master_user='debugo',master_password='debugo',master_log_file='mysql-bin.000005',master_log_pos=326;
MariaDB [(none)]> start slave;
--log-error
tail -f /var/log/mysqld.log
140502 20:42:20 [Note] 'CHANGE MASTER TO executed'. Previous state master_host='', master_port='3306', master_log_file='', master_log_pos='4'. New state master_host='192.168.1.132', master_port='3306', master_log_file='mysql-bin.000005', master_log_pos='326'.
140502 20:42:22 [Note] Slave SQL thread initialized, starting replication in log 'mysql-bin.000005' at position 326, relay log './ostack02-relay-bin.000001' position: 4
140502 20:42:22 [Note] Slave I/O thread: connected to master 'debugo@192.168.1.132:3306',replication started in log 'mysql-bin.000005' at position 326

4. 复制测试
完成上面的配置后,进行一下简单的测试。分别从两个节点写入数据,并在另一节点验证。

--OStack01
MariaDB [(none)]> use test;
Database changed
MariaDB [test]> create table t(name varchar(10));
Query OK, 0 rows affected (0.02 sec)
MariaDB [test]> set autocommit=0
MariaDB [test]> show variables like "autocommit";
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| autocommit    | OFF   |
+---------------+-------+
MariaDB [test]> insert into t values ('debugo');
Query OK, 1 row affected (0.00 sec)
MariaDB [test]> insert into t values ('mongo');
Query OK, 1 row affected (0.00 sec)
MariaDB [test]> commit;
--OStack02
MariaDB [test]> show tables;
+----------------+
| Tables_in_test |
+----------------+
| t              |
+----------------+
1 row in set (0.00 sec)
MariaDB [test]> select * from t;
+--------+
| name   |
+--------+
| debugo |
| mongo  |
+--------+
2 rows in set (0.00 sec)

由此可见,从OStack01节点执行的DDL/DML改变被成功写入到了OStack02中。下面OStack02->OStack01测试:

--OStack02
MariaDB [test]> delete from t where name='mongo';
Query OK, 0 rows affected (0.00 sec)
MariaDB [test]> commit;
Query OK, 0 rows affected (0.00 sec)
--OStack01
MariaDB [test]> select * from t;
+--------+
| name   |
+--------+
| debugo |
+--------+
1 row in set (0.00 sec)

^^

Reference:

http://www.mysqlperformanceblog.com/2013/10/02/mysql-5-7-multi-source-replication/

http://www.cnblogs.com/simplelogic/p/3550960.html

http://www.mysqlperformanceblog.com/2009/11/18/how-innodb_open_files-affects-performance/

http://heylinux.com/archives/2367.html

http://qdjalone.blog.51cto.com/1222376/1314962

推荐阅读
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • REVERT权限切换的操作步骤和注意事项
    本文介绍了在SQL Server中进行REVERT权限切换的操作步骤和注意事项。首先登录到SQL Server,其中包括一个具有很小权限的普通用户和一个系统管理员角色中的成员。然后通过添加Windows登录到SQL Server,并将其添加到AdventureWorks数据库中的用户列表中。最后通过REVERT命令切换权限。在操作过程中需要注意的是,确保登录名和数据库名的正确性,并遵循安全措施,以防止权限泄露和数据损坏。 ... [详细]
  • Python项目实战10.2:MySQL读写分离性能优化
    本文介绍了在Python项目实战中进行MySQL读写分离的性能优化,包括主从同步的配置和Django实现,以及在两台centos 7系统上安装和配置MySQL的步骤。同时还介绍了创建从数据库的用户和权限的方法。摘要长度为176字。 ... [详细]
  • shell脚本实战 pdf_Shell 脚本操作数据库实战
    安装mariadb数据库(默认没有密码,直接mysql即可进入数据库管理控制台)yuminstallmariadbmariadb-serv ... [详细]
  • 阿里云主机实战应用之centos7上的防火墙设置
    最近公司又上了一台服务器,以前都是用centos6系统,这次选择使用了centos7系统的安装镜像,因为现在程序版本在centos7上一般php默认就是5.4以上的,mysql也 ... [详细]
  • MySQL/MariaDB/PerconaDB提权条件漏洞
    背景  2016年11月01日,国外安全研究员DawidGolunski在MyS ... [详细]
  • 如何部署Zabbix监控实现监测和报警机制
    这篇文章的知识点包括:Zabbix的安装部署、Zabbix监控的实现以及Zabbix报警机制的实现,阅读完整文相信大家对Zabbix监控的使用有了一定的认识。Zabb ... [详细]
  • mysql数据库生成表插件_screw 数据库文档生成工具
    简洁好用的数据库表结构文档工具在企业级开发中、我们经常会有编写数据库表结构文档的时间付出,从业以来,待过几家企业,关于数据库表结构文档状态:要么没有、要么有、但都是手写 ... [详细]
  • MFC程序连接MySQL成功实现查询功能,但无法实现修改操作——详解查询语句在MySQL中的使用过程
    selectxxx,xxx,xxxfromxxxwherexxxxxx,xxxxxx程序的日常开发中,我们经常会写到各种各样的简单的,复杂的查询sql语 ... [详细]
  • 数据库进入全新时代,腾讯云发布五大数据库提前布局
    8月28日,腾讯云数据库在京正式启动战略升级,宣布未来将聚焦云原生、自治、超融合三大战略方向,以用户为中心,联接未来。并在现场面向全球用户同步发布五大战略级新品,包括数据库智能管家 ... [详细]
  • 本文是搭建的mariadb-10.0.17版本的下载地址:https:downloads.mariadb.orginterstitialmariadb-10.0.17sourcemariadb-10.0.17.tar.gzfromhtt ... [详细]
  • MySQL之left join表查询中发生字符集转换导致表索引失效
    mysql,之,left,join,表,查询,中,发生,字符,集,转换, ... [详细]
  • centos7如何利用yum安装mysql 8.0.12
    这篇文章将为大家详细讲解有关centos7如何利用yum安装mysql8.0.12,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有 ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了CentOS7编译mysql8.0.12相关的知识,希望对你有一定的参考价值。步骤一:安装 ... [详细]
  • MYsql_linux mysql
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了linuxmysql相关的知识,希望对你有一定的参考价值。一数据库安装查看:[[email pr ... [详细]
author-avatar
lily--妹妹
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有