当前位置: 首页 > 科技观察

如何设置MariaDB主-主复制?请接受本教程~

时间:2023-03-20 23:21:38 科技观察

MariaDBMaster-Master复制服务器以提高速度和减少延迟。使用复制功能,两个独立的MySQL服务器充当一个集群。服务器彼此同步,以便在发生故障时,其他服务器可以接管而不会丢失数据。环境OS:CentOS8.5MariaDB:MariaDB10.3.28两台主机的名称如下:Hostname:MasterA,IP:192.168.232.130Hostname:MasterB,IP:192.168.232.131安装MariaDB使用如下命令安装mariadb两天服务器中的服务:#在MasterA中安装:[root@MasterA~]#yum-yinstallmariadbmariadb-server#在MasterB中安装:[root@MasterB~]#yum-yinstallmariadbmariadb-server启动mariadbservice:[root@MasterA~]#systemctlenablemariadb--now[root@MasterB~]#systemctlenablemariadb--now编辑my.cnf配置文件编辑/etc/my.cnf.d/mariadb-server。cnf配置文件修改MasterA节点的mariadb-server。cnf配置文件:[root@MasterAmy.cnf.d]#vimmariadb-server.cnf在mysqld部分下添加server-id、log-bin、log-basename保存配置,重启MasterA的MariaDB服务。[root@MasterA~]#systemctlrestartmariadb在MasterA的数据库中创建一个账号,用户名为replica_user,密码为123456,指定slave的IP地址为192.168.232.131,也就是MasterB的IP地址.MariaDB[(none)]>grantreplicationslaveon*.*to'replica_user'@192.168.232.131identifiedby'123456';QueryOK,0rowsaffected(0.000sec)MariaDB[(none)]>flushprivileges;QueryOK,0rowsaffected(0.001sec)修改MasterB节点的mariadb-server.cnf配置文件:[root@MasterB~]#vim/etc/my.cnf.d/mariadb-server.cnf下添加server-idmysqld部分、log-bin和log-basename保存配置,重启MasterA的MariaDB服务。[root@MasterA~]#systemctlrestartmariadb在MasterB的数据库中创建一个账号,用户名为replica_user,密码为123456,指定slave的IP地址为192.168.232.130,也就是MasterA的IP地址.MariaDB[(none)]>grantreplicationslaveon*.*to'replica_user'@192.168.232.130identifiedby'123456';QueryOK,0rowsaffected(0.000sec)MariaDB[(none)]>flushprivileges;QueryOK,0rowsaffected(0.001sec)配置双主复制首先进入MasterA操作系统,进入数据库,使用showmasterstatus;查看二进制日志名称和pos值:[root@MasterA~]#mysql-uroot-p123456欢迎使用MariaDB监视器。命令以;结尾或\g。您的MariaDB连接ID是19Server版本:10.3.28-MariaDB-logMariaDBServerCopyright(c)2000,2018,Oracle,MariaDBCorporationAbandothers.Type'help;'或'\h'寻求帮助。输入'\c'清除当前输入语句。MariaDB[(none)]>showmasterstatus;+--------------------+----------+----------------+----------------+|文件|当前位置|Binlog_Do_DB|Binlog_Ignore_DB|+--------------------+--------+---------------+----------------+|master01-bin.000004|5078|||+----------------------+----------+------------+----------------+1rowinset(0.000sec)MariaDB[(none)]>inMasterBsystem进入数据库,指定MasterA服务器的信息,指定刚才从MasterA获取的bin-log文件名和位置值,启动slave:MariaDB[(none)]>changemastertomaster_host='192.168.232.130',->master_user='replica_user',->master_password='123456',->master_log_file='master01-bin.000004',->master_log_pos=5078;QueryOK,0rowsaffected(0.007sec)MariaDB[(none)]>startslave;QueryOK,0rowsaffected(0.002sec)查看slave的状态是否有错误:见上图,Slave_IO_Running和Slave_SQL_Running都是yes,Last_Error没有错误信息其次,在MasterB的数据库中查询master相关信息:MariaDB[(none)]>showmasterstatus;+--------------------+----------+----------------+----------------+|文件|当前位置|Binlog_Do_DB|Binlog_Ignore_DB|+--------------------+----------+--------------+-------------------+|master02-bin.000001|1080|||+-----------------+----------+------------+----------------+1rowinset(0.000sec)进入MasterA系统中的数据库,指定MasterB服务器的信息,指定bin-log文件名和位置刚才从MasterB获取的值,启动slave:MariaDB[(none)]>changemastertomaster_host='192.168.232.131',->master_user='replica_user',->master_password='123456',->master_log_file='master02-bin.000001',->master_log_pos=1080;QueryOK,0rowsaffected(0.010sec)MariaDB[(none)]>startslave;QueryOK,0rowsaffected(0.002sec)检查是否有错误在slave的状态中:见上图,Slave_IO_Running和Slave_SQL_Running是,Last_Error中没有报错信息。对于任何数据库,创建数据库后,其他人也可以看到它。下面是在MasterB中创建的数据库:MariaDB[test_replica]>createdatabasemydb;QueryOK,1rowaffected(0.000sec)查看MasterA中是否有mydb数据库:下面是在MasterA中创建数据库:MariaDB[(none)]>createdatabasemydb_02;QueryOK,1rowaffected(0.000sec)检查MasterB中是否有mydb_02数据库:下面的例子将MasterA数据库中的test_replica库备份并导入到MasterB数据库中,然后在MasterB中的数据库添加数据,查看是否会同步:[root@MasterA~]#mysqldump-uroot-p123456test_replica>a.sql[root@MasterA~]#scpa.sqlroot@192.168.232.131:~切换到MasterB操作系统,创建名为test_replica的数据库:[root@MasterB~]#mysql-uroot-p123456-e'createdatabasetest_replica;'[root@MasterB~]#mysql-uroot-p123456-e'显示数据库;'将MasterA中各处的数据导入到MasterB系统中的test_replica库中:[root@MasterB~]#mysql-uroot-p123456test_replicainsertintoAdminsvalues('user01','123');查询OK,1rowaffected(0.002sec)查看MasterA中test_replica数据库的Admins表:[root@MasterA~]#mysql-uroot-p123456-e'select*fromtest_replica.Admins;'+---------+------+|名字|Apwd|+--------+------+|管理员|第123章用户01|123|+--------+------+可以看到数据是存在的。接下来在MasterA中的Admins表中添加数据,看是否会同步到MasterB数据库中:MariaDB[test_replica]>insertintoAdminsvalues('user02','321');QueryOK,1rowaffected(0.002sec)inMasterB也可以看到刚刚创建的信息:[root@MasterB~]#mysql-uroot-p123456-e'select*fromtest_replica.Admins;'+-------+------+姓名|Apwd|+--------+------+|管理员|第123章用户01|第123章用户02|321|+--------+------+就是这样。