maradb 双主配置

Posted Forande

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了maradb 双主配置相关的知识,希望对你有一定的参考价值。

[TOC]

一、服务器环境

IP

用途

服务器版本

软件版本

10.224.216.121

master A

centos 7.4

mariadb 10.4.11

10.224.216.122

master B

centos 7.4

mariadb 10.4.11

10.224.216.123

VIP



三、安装mysql

1、修改环境变量

sed -i $ a export PATH=/data/zabbix/mysql/bin:\\$PATH /etc/profile 
source /etc/profile

2、检查mysql

$ mysql -V
mysql Ver 15.1 Distrib 10.4.11-MariaDB, for Linux (x86_64) using readline 5.1

3、配置启动文件

1、配置init启动
cp /data/zabbix/mysql/support-files/mysql.server /etc/init.d/mysqld
  • 启动测试

```bash service mysqld start service mysqld stop /etc/init.d/mysqld restart ```

2、配置systemctl启动 到官网上把systemd文件复制下来
cat >/etc/systemd/system/mysqld.service <<EOF
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
ExecStart=/data/zabbix/mysql/bin/mysqld_safe --defaults-file=/data/zabbix/mysql/etc/my.cnf
LimitNOFILE=5000
EOF
  • 测试启动

```bash ps -ef|grep mysql netstat -naltp|grep 3366 ```

四、master A 配置

2、配置my.cnf文件

cat > /data/zabbix/mysql/etc/my.cnf <<EOF
[mysqld]
port=3366
user=mysql
server_id=20
binlog_format=ROW
slow_query_log=ON
relay_log_purge=OFF
log_slave_updates=ON
skip_name_resolve=ON
innodb_file_per_table=ON
table_open_cache=64
key_buffer_size=16M
max_allowed_packet=1M
net_buffer_length=8K
sort_buffer_size=512K
read_buffer_size=256K
read_rnd_buffer_size=512K
character-set-server=utf8mb4
init_connect=SET NAMES utf8mb4
collation-server=utf8mb4_general_ci
basedir=/data/zabbix/mysql
datadir=/data/zabbix/mysql/data
log_bin=/data/zabbix/mysql/logs/bin_log
socket=/data/zabbix/mysql/tmp/mysql.sock
log_error=/data/zabbix/mysql/logs/error.log
relay_log=/data/zabbix/mysql/logs/mysql_relaylog
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
relay_log_index=/data/zabbix/mysql/logs/mysql_relaylog

[mysql]
default-character-set = utf8mb4
socket=/data/zabbix/mysql/tmp/mysql.sock

[client]
port=3366
default-character-set = utf8mb4
socket=/data/zabbix/mysql/tmp/mysql.sock

EOF

3、启动mariadb

systemctl start mysqld

给root创建pwd

mysqladmin -uroot password Nokia!23+

4、创建zabbix账号并授权

mysql -uroot -pNokia!23+ -e "grant replication slave on *.* to zabbix@10.224.216.% identified by Nokia!23=;flush privileges;"

5、查看zabbix账号

mysql -uroot -pNokia!23+ -e "select User,Host,authentication_string from mysql.user where User=zabbix;" -S /data/zabbix/mysql/tmp/mysql.sock
+------+-------------+-------------------------------------------+
| User | Host | authentication_string |
+------+-------------+-------------------------------------------+
| bak | 10.224.216.0.% | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
+------+-------------+-------------------------------------------+

6、数据库备份

如果数据库有数据就备份数据库,然后到另一台上去还原库

mysqldump -uroot -pNokia!23+ -A --master-data=2 --single-transaction -R -E --triggers -S /data/zabbix/mysql/tmp/mysql.sock > /tmp/master.sql

7、拷贝备份数据A到B

 scp /tmp/master.sql root@10.224.216.122:/tmp/
  • --master-data选项的作用就是将二进制的信息写入到输出文件中,在这里是写入到备份的sql文件中。
  • --master-data选项将二进制日志的位置和文件名写入到输出中。该选项要求有RELOAD权限,并且必须启用二进制日志。

- 如果该选项值等于1,位置和文件名被写入CHANGE MASTER语句形式的转储输出,如果你使用该SQL转储主服务器以设置从服务器,从服务器从主服务器二进制日志的正确位置开始。 - 如果选项值等于2,CHANGE MASTER语句被写成SQL注释。如果value被省略,这是默认动作。

  • --single-transaction参数的作用,设置事务的隔离级别为可重复读,即REPEATABLE READ,这样能保证在一个事务中所有相同的查询读取到同样的数据,也就大概保证了在dump期间,如果其他innodb引擎的线程修改了表的数据并提交,对该dump线程的数据并无影响,在这期间不会锁表。
  • --triggers导出触发器。该选项默认启用,用--skip-triggers禁用它。

五、master A 配置

1、初始化master B数据库,清空其中的数据

2、删除数据库

rm -rf /data/zabbix/mysql/data/*

3、配置mysql

cat > /data/zabbix/mysql/etc/my.cnf <<EOF
[mysqld]
port=3366
user=mysql
server_id=50
binlog_format=ROW
slow_query_log=ON
relay_log_purge=OFF
log_slave_updates=ON
skip_name_resolve=ON
innodb_file_per_table=ON
table_open_cache=64
key_buffer_size=16M
max_allowed_packet=1M
net_buffer_length=8K
sort_buffer_size=512K
read_buffer_size=256K
read_rnd_buffer_size=512K
character-set-server=utf8mb4
init_connect=SET NAMES utf8mb4
collation-server=utf8mb4_general_ci
basedir=/data/zabbix/mysql
datadir=/data/zabbix/mysql/data
log_bin=/data/zabbix/mysql/logs/bin_log
socket=/data/zabbix/mysql/tmp/mysql.sock
log_error=/data/zabbix/mysql/logs/error.log
relay_log=/data/zabbix/mysql/logs/mysql_relaylog
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
relay_log_index=/data/zabbix/mysql/logs/mysql_relaylog

[mysql]
default-character-set = utf8mb4
socket=/data/zabbix/mysql/tmp/mysql.sock

[client]
port=3366
default-character-set = utf8mb4
socket=/data/zabbix/mysql/tmp/mysql.sock

EOF

4、初始化数据库

/data/zabbix/mysql/scripts/mysql_install_db --defaults-file=/data/zabbix/mysql/etc/my.cnf

5、启动数据库

/data/zabbix/mysql/bin/mysqld_safe --defaults-file=/data/zabbix/mysql/etc/my.cnf &

6、创建数据库pwd

/data/zabbix/mysql/bin/mysqladmin -uroot  password Nokia!23+ -S /data/zabbix/mysql/tmp/mysql.sock

7、导入数据库

/data/zabbix/mysql/bin/mysql -uroot  -pNokia!23+ -S /data/zabbix/mysql/tmp/mysql.sock -e "set sql_log_bin=0;source /tmp/master.sql;"

8、slave设置导入二进制日志的相关配置

1、查看导入sql
/data/zabbix/mysql/bin/mysql -uroot  -pNokia!23+ -S /data/zabbix/mysql/tmp/mysql.sock 
mysql> help change master to;
# 找到导入的sql
CHANGE MASTER TO
MASTER_HOST=master2.example.com,
MASTER_USER=replication,
MASTER_PASSWORD=password,
MASTER_PORT=3366,
MASTER_LOG_FILE=master2-bin.001,
MASTER_LOG_POS=4,
MASTER_CONNECT_RETRY=10;
2、查找从主库导入二进制日志的位置

mariadb(mysql5.7)是在22行,其他版本的数据库,可以按照关键字来查找,

  • 找到这个记录备份时刻的数据记录,就可以做备份了

```bash vim /root/master.sql 22 -- CHANGE MASTER TO MASTER_LOG_FILE=bin_log.000001, MASTER_LOG_POS=526; ```

  • 设置master主机的同步信息

```bash CHANGE MASTER TO MASTER_HOST=10.224.216.121, MASTER_USER=zabb

以上是关于maradb 双主配置的主要内容,如果未能解决你的问题,请参考以下文章

Nginx+keepalived双主配置(双机双主热备)

Mysql双主配置及安装部署

Mysql双主配置及安装部署

Keepalived单双主模型配置

MySQL的双主配置

keepalived + lvs + nginx 双主配置案例