最近公司测试库改建,之前测试库上面装的是老的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;
如果没有报错,那么双主执行成功,在两台机器间创建数据库、创建表、创建数据测试一下,两台机器就会互相同步数据了!
注:本文内容来自互联网,旨在为开发者提供分享、交流的平台。如有涉及文章版权等事宜,请你联系站长进行处理。