如何在Ubuntu 18.04/Debian 9上配置MariaDB复制
在本教程中,我们将介绍如何配置MariaDB Master-Slave
在Ubuntu 18.04和Debian 9服务器上进行复制。 MariaDB是一个
社区开发的MySQL关系数据库管理分支
系统,其开发,安全性和
改进。
MariaDB复制过程使我们可以维护多个
MySQL数据的副本。主服务器中的所有数据均已同步到从服务器
在自动化的过程中,如果我们遇到灾难,我们可以轻松地
将Slave提升为Master进行提交操作。主要作用
复制是为了将读写工作负载分散到多个
服务器,可轻松扩展。
在Ubuntu 18.04/Debian 9上安装MariaDB
我有两个节点将用于设置MariaDB
主从复制。第一个节点将充当主节点,而
第二个是奴隶。
Node 1: 192.168.18.40 Node 2: 192.168.18.41
本演示中使用的MariaDB版本是10.3. 我们可以将10.3替换为要安装的MariaDB版本。
在Ubuntu 18.04上安装MariaDB 10.3
使用以下命令在Ubuntu 18.04服务器上安装MariaDB 10.3.
sudo apt update sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8 sudo add-apt-repository 'deb [arch=amd64] http://mirror.zol.co.zw/mariadb/repo/10.3/ubuntu bionic main' sudo apt update sudo apt install mariadb-server mariadb-client
在Debian 9上安装MariaDB 10.3
添加MariaDB 10.3存储库并安装mariadb-server软件包。
sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0xF1656F24C74CD1D8 sudo add-apt-repository 'deb [arch=amd64,i386,ppc64el] http://mirror.zol.co.zw/mariadb/repo/10.3/debian stretch main' sudo apt-get update && sudo apt-get install mariadb-server
出现提示时设置root密码
While not mandatory, it is highly recommended that you set a password for the MariaDB administrative "root" user. If this field is left blank, the password will not be changed. New password for the MariaDB "root" user: Repeat password for the MariaDB "root" user:
配置MariaDB主服务器
在两台服务器上都安装了MariaDB之后,通过ssh登录到节点1(主节点),并将侦听地址更改为服务器的实际IP地址。编辑文件" /etc/mysql/my.cnf",并在" mysqld"部分下添加以下行。
#bind-address = 127.0.0.1 bind-address = 192.168.18.40
设置服务器ID,它将是主服务器的唯一标识符。
server-id = 100
创建数据库复制用户
$mysql -u root -p Enter password: Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 50 Server version: 10.3.9-MariaDB-1:10.3.9+maria~bionic-log mariadb.org binary distribution Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]> grant replication slave on *.* to theitroad@localhost'%' identified by 'StrongPassword'; Query OK, 0 rows affected (0.001 sec) MariaDB [(none)]> flush privileges; Query OK, 0 rows affected (0.001 sec) MariaDB [(none)]> exit Bye
重新启动MariaDB服务器,以使更改生效。
sudo systemctl restart mysql
使用ss或者netstat命令检查状态。
# ss -tunelp | grep 3306
tcp LISTEN 0 70 192.168.18.40:3306 0.0.0.0:* users:(("mysqld",pid=16877,fd=22)) uid:111 ino:48116 sk:4 <->
如果我们正在运行防火墙,请打开port3306
sudo ufw allow 3306
配置MariaDB从服务器
登录到一个或者多个从属服务器并配置MariaDB:
$sudo vim /etc/mysql/my.cnf
在mysqld部分下设置以下值。
[mysqld] bind-address = 192.168.18.41 server-id = 101 log_bin = /var/log/mysql/mariadb-bin read_only = 1 report-host = mariadb-slave1 expire-logs-days = 7
read_only = 1:这会将从站设置为只读
模式。仅具有SUPER特权和复制从属的用户
线程将能够修改其上的数据。这样可以确保没有
可能会意外修改从站上的数据的应用程序,而不是
主。
server-id = 101:这是一个唯一的服务器标识号。如果未设置,则默认为1.
log_bin =/var/log/mysql/mariadb-bin:启用
二进制日志记录。这是在复制中充当MASTER所必需的
组态。如果我们需要以下功能,则还需要二进制日志:
从最新备份中进行时间点恢复。
更改后重新启动" mariadb"。
sudo systemctl restart mysql
初始化复制过程
我们应该准备在从属服务器上启动复制过程。首先检查主服务器上的状态:
MariaDB [(none)]> show master status\G
** **** **** **** **** **** ***** 1. row ** **** **** **** **** **** *****
File: mariadb-bin.000003
Position: 344
Binlog_Do_DB:
Binlog_Ignore_DB:
1 row in set (0.000 sec)
记下currentMaster日志文件和位置。然后配置
从服务器,其详细信息是从master status命令获得的。
以root用户身份登录MariaDB Slave服务器并配置与主服务器的连接
$mysql -u root -p CHANGE MASTER TO MASTER_HOST='192.168.18.40', MASTER_USER='mysql_replica', MASTER_PASSWORD='StrongPassword', MASTER_LOG_FILE='mariadb-bin.000003', MASTER_LOG_POS=344;
然后在从属服务器上开始复制:
mysql> start slave; Query OK, 0 rows affected (0.002 sec)
要检查从站状态,请使用:
MariaDB [(none)]> show slave status\G
** **** **** **** **** **** ***** 1. row ** **** **** **** **** **** *****
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.18.40
Master_User: mysql_replica
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mariadb-bin.000003
Read_Master_Log_Pos: 344
Relay_Log_File: mysqld-relay-bin.000002
Relay_Log_Pos: 557
Relay_Master_Log_File: mariadb-bin.000003
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: 344
Relay_Log_Space: 867
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: 100
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
Slave_DDL_Groups: 0
Slave_Non_Transactional_Groups: 0
Slave_Transactional_Groups: 0
1 row in set (0.001 sec)
从站IO和SQL应指示运行状态:
Slave_IO_Running: Yes Slave_SQL_Running: Yes
主服务器上的进程列表检查还应显示来自从服务器的连接。
MariaDB [(none)]> select ID,user,host,db,command,time,state from information_schema.processlist order by time desc limit 5; +----+---------------+---------------------+------+-------------+------+------------------------------------------------------------------+ | ID | user | host | db | command | time | state | +----+---------------+---------------------+------+-------------+------+------------------------------------------------------------------+ | 38 | mysql_replica | 192.168.18.41:51522 | NULL | Binlog Dump | 988 | Master has sent all binlog to slave; waiting for binlog to be up | | 2 | system user | | NULL | Daemon | 0 | InnoDB purge worker | | 5 | system user | | NULL | Daemon | 0 | InnoDB shutdown handler | | 1 | system user | | NULL | Daemon | 0 | InnoDB purge coordinator | | 4 | system user | | NULL | Daemon | 0 | InnoDB purge worker | +----+---------------+---------------------+------+-------------+------+------------------------------------------------------------------+ 5 rows in set (0.000 sec)
如果我们是MySQL用户,请查看如何在Ubuntu 18.04上配置MySQL 8.0主从复制。

