mariadb集群

[TOC]

前期工作

  • 默认已经按官方的搭建好了mariadb数据库
  • 主机规划:
    `10.108.210.212`   node1
    `10.108.204.191`   node2
    `10.108.207.93`    node3
    
    共用数据库kaa 账号密码 kaacluster 123456(三个数据库都创建个这个账号)
    1.运行 mysql_secure_installation配置MariaDB
    我们可以根据自己的需求进行配置定义
    2.给远程账户运行权限:
    在mysql下运行
    1
    2
    GRANT ALL PRIVILEGES ON *.* TO 'kaacluster'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
    flush privileges;

集群

1.我们首先登陆到Mysql主服务器node1上,然后编辑mysql的配置文件

1
sudo vim /etc/my.cnf.d/server.cnf

我们要添加以下内容;

注:一定要加入到加到mysqld下面,如果加入的位置或者信息不对的话,执行show master status;结果为空;

1
2
3
4
5
6
7
8
#设置服务器ID,为1的表示为主服务器;如果服务器没有以下配置,添加,如果有就跳过。
server-id=1
#启动MySQ二进制日志系统,注意:如果原来的配置文件中已经有这一行,就不用再添加了。
log_bin=mysql-bin
#需要同步的数据库名,如果有多个数据库,可重复此参数,每个数据库一行\
binlog-do-db=kaa
#不同步mysql系统数据库
binlog-ignore-db=mysql

2.重启mysql服务

1
sysmtectl restart mariadb

3.进入mysql控制台

1
mysql -u kaacluster -p 123456

查看数据库主机的配置文件状态

1
show master status;#mysql中执行

查看主服务器,出现以下类似信息;如果看不见以下结果或者为空的话,说明my.cnf配置文件配置的有问题,请检查即可。

注意:这里记住File的值:mysql-bin.00000x和Position的值:245,后面会用到。

4.有了主服务器的mysql主机配置后,我需要在从服务器上进行配置了

配置MySQL从服务器的同样文件;区别就是server-id不一样

1
sudo vim /etc/my.cnf.d/server.cnf

我们要添加以下内容;

注:一定要加入到加到mysqld下面,如果加入的位置或者信息不对的话,执行show master status;结果为空;

1
2
3
4
5
6
7
8
#设置服务器ID,为1的表示为主服务器;如果服务器没有以下配置,添加,如果有就跳过。
server-id=2
#启动MySQ二进制日志系统,注意:如果原来的配置文件中已经有这一行,就不用再添加了。
log_bin=mysql-bin
#需要同步的数据库名,如果有多个数据库,可重复此参数,每个数据库一行\
binlog-do-db=kaa
#不同步mysql系统数据库
binlog-ignore-db=mysql

5.接下来配置slave,进入从服务器的mysql控制台配置下:

1
2
mysql -u kaacluster -p #进入MySQL控制台
slave stop; #停止slave同步进程

6.接下来通过以下命令来配置主从关系了;以下命令是在从服务器上操作的。

1
2
change master to master_host='10.108.201.212',master_user='kaacluster',master_password='123456',master_log_file='mysql-bin.000009' ,master_log_pos=254;
#mysql中执行

里面填写的信息是是在主服务器上执行show master status;的信息

启动slave

1
slave start;

最后我们查看主从同步是否正常

1
show slave status;#mysql中执行

测试

最后我们测试数据,给主服务器数据表添加数据,可以在从服务器上看到数据库更新


出现的问题解决

连不上解决:

这个原因是因为防火墙的问题
在mysql服务端执行
service iptables stop

主库空间问题,日志被截断

出现报错:Got fatal error 1236 from master when reading data from binary log: ‘binlog truncated in the middle of event; consider out of disk space on master; the start event position from ‘mysql-bin.006730’ at 290066434, the last event was read from ‘/u01/my3309/log/mysql-bin.006730
【原因】
该错误和主库的空间问题和sync_binlog配置有关,当主库 sync_binlog=N不等于1且磁盘空间满时,MySQL每写N次binary log,系统才会同步到磁盘,但是由于存储日志的磁盘空间满而导致MySQL 没有将日志完全写入磁盘,binlog event被截断。slave 读取该binlog file时就会报错”binlog truncated in the middle of event;”
当sync_binlog 的默认值是0,像操作系统刷其他文件的机制一样,MySQL不会同步到磁盘中去而是依赖操作系统来刷新binary log。
当sync_binlog =N (N>0) ,MySQL 在每写 N次 二进制日志binary log时,会使用fdatasync()函数将它的写二进制日志binary log同步到磁盘中去。
【如何解决】
在从库重新指向到主库下一个可用的binlog file 并且从binlog file初始化的位置开始
stop slave;
change master to master_log_file=’mysql-bin.006731’, master_log_pos=4;
start slave;

问题:Last_IO_Error: Master command COM_REGISTER_SLAVE failed: Access denied for user ‘kaacluster’@’10.108.204.191’ (using password: YES) (Errno: 1045)

解决:在主服务器上,设置一个从数据库的账户,使用REPLICATION SLAVE赋予权限

mysql> grant replication slave on . to ‘数据库账号’@’192.168.254.153’ identified by ‘数据库密码’;
然后在从服务器上stop slave; start slave;

热评文章