最近公司测试库改建,之前测试库上面装的是老的MySql,我顺手就把它换成了MariaDB,后来因为连的人太多就爆了Too Many Connections,本来很简单的事情,就让技术部一小伙子上去把连接数调大了一点,很简单,但是后来我发现他居然直接写在了My.cnf下面,显然他是不知道MariaDB早就从My.cnf下面扩展到了my.cnf.d文件夹下面,于是就跟他一番讲解,然后就引出了配置集群的话题,所以觉得有必要写一下MariaDB的一些配置和集群的配置方法。
MariaDB本身就是MySql的一个分支,所以很多东西都是MySql延展下来的,既然要说的话就先从安装说起吧,在CentOS下安装还是很简单的,官网有很明确的说明以及各种安装方法,我个人比较喜欢yum源的安装方法,下面我们开始。
第一步、安装MariaDB
我们以最小集群来说,两台服务器先做主从配置,然后再做互为主从的配置,两台主机的IP分别为:192.168.70.135,192.168.70.137。
先去官网上复制一下源的配置:
https://downloads.mariadb.org/mariadb/repositories/#mirror=neusoft&distro=CentOS&distro_release=centos7-amd64--centos7&version=10.2
选择对应的操作系统版本及MariaDB的版本后会给出对应的配置,我这里选择的是Centos7,MariaDB的版本是10.2,所以给出的源是这样的:
# MariaDB 10.2 CentOS repository list - created 2017-07-12 14:25 UTC
# http://downloads.mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.2/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
OK!然后直接vim /etc/yum.repos.d/MariaDB.repo复制进去保存即可,然后yum安装
yum install MariaDB-server MariaDB-client
不要以为安装完成就可以使用,mysql的用户和数据文件夹先指定一下,我的数据文件放在了/opt/data/mysql下面,执行下面的命令
mysql_install_db --defaults-file=/etc/my.cnf --datadir=/opt/data/mysql/ --user=mysql
OK!这时启动一下看看
systemctl start mariadb
systemctl status mariadb
不出意外,启动成功,设置一下root密码
mysqladmin -u root password "123456"
登录一下,不出意外应该成功了。
第二步、配置MariaDB
上面只是简单的安装,下面我们再简单的配置一下为集群做准备,先进入/etc/my.cnf.d/文件夹,MariaDB的所有配置文件都在这下面,主要配置文件还是在/etc/my.cnf.d/server.cnf下面
vim /etc/my.cnf.d/server.cnf
修改[mysqld]下面的内容
[mysqld]
character-set-server=utf8
lower_case_table_names=1
init_connect='SET NAMES utf8'
datadir=/opt/data/mysql
socket=/opt/data/mysql/mysql.sock
server-id = 1
log-bin=mysql-bin
log-bin-index=master-bin.index
relay-log=relay-log
relay-log-index=relay-bin
log-slave=updates
1. character-set-server是设置数据库的编码格式
2. lower_case_table_names是设置数据库不区分大小写
3. datadir,socket是设置数据库实例的目录
4. server-id这个很重要,是指定集群中数据库服务的ID,在集群情况下每台数据库服务的ID都不能重复
5. log-bin和log-bin-index是开始MySQL的二进制日志并指定日志文件名
6. relay-log和relay-log-index是开始MySQL的中继日志并指定日志文件名
7. log-slave这个是设定slave节点的二进制输出,若没有设定此项则slave不会输出二进制,但是为了能够让slave也能够升级为master则该项最好配置一下
为了能让两台MySQL服务能够互相连接,最好先创建让他们互相连接的数据库账户,现在master上简历用户,并授权,该账户为同步专用
mysql> GRANT REPLICATION SLAVE ON *.* TO repl@192.168.70.137 IDENTIFIED BY '123456';
PS:另外一台机器的/etc/my.cnf.d/server.cnf中其他配置都一样,就是server-id改成2,配置同步账户的时候IP地址改成可访问的机器的IP就行。
配置完成后两台机器都重启。
第三步、准备同步,配置主从
全部配置并且两台机器都启动成功之后,就可以开始准备同步两台机器的数据了,在此之前先登录第一台机器的数据库,查看一下master的状态:
mysql> show master status;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 | 922 | | |
+------------------+----------+--------------+------------------+
File就是当前该数据库binlog日志的文件索引所在的文件名,position是当前日志索引的位置,将这两个值记录下来,然后登录第二台数据库服务器,启动slave:
mysql> CHANGE MASTER TO
MASTER_HOST='192.168.70.135',
MASTER_USER='repl',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=922;
执行完成之后如果没有报错再执行show slave status\G命令查看slave节点的同步状态,如果ERROR没有显示错误并且Slave_IO_Running都为yes则表示同步成功。
MariaDB [(none)]> show slave status\G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.70.135
Master_User: repl
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000001
Read_Master_Log_Pos: 922
Relay_Log_File: relay-bin.000003
Relay_Log_Pos: 555
Relay_Master_Log_File: mysql-bin.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 922
Relay_Log_Space: 858
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 1
Master_SSL_Crl:
Master_SSL_Crlpath:
Using_Gtid: No
Gtid_IO_Pos:
Replicate_Do_Domain_Ids:
Replicate_Ignore_Domain_Ids:
Parallel_Mode: conservative
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it
1 row in set (0.00 sec)
这时在master节点的数据库服务器中创建数据库、创建表的话slave节点就直接可以看到了
PS:同步之前最好先检查一下你服务器的防火墙有没有拦截3306端口!
第四步、双主配置
前面的所有步骤完成后已经可以搭建单主多slave的架构了,如果想配置互为主从的其实很简单,在master节点中重复第三步,把master的IP指向对应的节点就好,不过需要注意的是Master可以有多个Slave,但是一个Slave只能挂靠一个Master!好的,我们先去192.168.70.137这台节点上查看一下master的status(就是第三步中的slave节点)
mysql> show master status;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000002 | 985 | | |
+------------------+----------+--------------+------------------+
然后再刚才master节点的数据库中执行:
mysql> CHANGE MASTER TO
MASTER_HOST='192.168.70.137',
MASTER_USER='repl',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='mysql-bin.000002',
MASTER_LOG_POS=985;
如果没有报错,那么双主执行成功,在两台机器间创建数据库、创建表、创建数据测试一下,两台机器就会互相同步数据了!