MariaDB 搭建主备及主主
一、主备
1. 采用GTID进行主从复制
A. 在my.cnf配置如下参数:
sync-master-info = 1 #MariaDB依靠操作系统将master.info文件刷新到磁盘。 sync_relay_log_info = 1 #MariaDB依靠操作系统将relay-log.info文件刷新到磁盘。 master-verify-checksum = 1 #主服务器效验 slave-sql-verify-checksum = 1 #从服务器效验 server-id = 111111 #MySQL服务器ID,不重复,可以通过Linux系统变量来生成:$RANDOM log-bin = mysql-bin #二进制日志(默认开启) sync-binlog = 1 #主服务器进行设置,用于事务安全 log-bin-index = mysql-bin relay-log = relay-bin #中继日志 slave-parallel-threads = 2 #设定从服务器的SQL线程数 relay_log_recovery = 1 #从站崩溃后可以使用,防止损坏的中继日志处理。 log-slave-updates = 1 #slave将复制事件写进自己的二进制日志 relay-log-index = relay-bin
log_bin_trust_function_creators=1 replicate-ignore-table = xxl_job.xxl_job_log replicate-ignore-table = xxl_job.xxl_job_log_report replicate-ignore-table = xxl_job.xxl_job_registry
B. 在主库中创建复制账号,允许从库来访问,命令如下:grant replication slave,replication client on *.* to 'rhxycopy'@'192.168.1.2' IDENTIFIED by '123456'; flush privileges;
C. 在从库上执行如下命令:stop slave; reset slave; change master to master_host='192.168.1.1', master_port=3306, master_user='rhxycopy', master_password='123456', master_use_gtid=slave_pos; start slave;
D. 在从库上确认复制正常:Slave_IO_Running和Slave_SQL_Running都为YES;
E. 常见使用命令如下:
select * from mysql.user;
flush privileges;
delete from mysql.user where User='rhxycopy';
show master status;
show slave status;
show global variables like 'gtid%';
2. master_use_gtid参数使用
A. slave_pos:Slave将Master最后一个GTID的position复制到本地,Slave主机可通过gtid_slave_pos变量查看最后一个GTID的position;
B. current_pos:假设有AB两台主机,A是Master,当A故障后,B成为Master,A修复后以Slave的身份重新添加,A之前从没担任过slave角色,所以没有之前复制的GTID号,此时gtid_slave_pos为空,为了能让A能自动添加为Slave,此时就用到该选项,但要注意不要让从服务器在binlog日志中写入事务,建议在服务器上设置gtid_strict_mode=ON;
C. no:关闭GTID功能。
3. change master参数使用:change master to master_host='127.0.0.1', master_port=3306, master_user='rhxycopy', master_password='123456', master_use_gtid=slave_pos,注意第一次就为备机时是slave_pos,如果第一次为主机再变成备机需要用current_pos
A. master_host:设置Master服务器的IP地址
B. master_port:设置Master服务器中MariaDB的实例端口号;
C. master_user:连接到Master服务器中MariaDB的账号;
D. master_password:连接到Master服务器中MariaDB的密码;
E. master_use_gtid:使用GTID复制协议;
F. master_connect_retry:连接到Master服务器中MariaDB的超时等待时间,默认60s;
G. master_retry_count:连接到Master服务器中MariaDB的最大连接次数,默认86400,设置为0表示无限制;
H. master_dely:表示Slave至少落后Master的复制时间,默认为0。
4. 注意点
A. 自增长:show session variables like'%auto_inc%';
B. 配置奇偶交叉步长:auto_increment_increment = 2,auto_increment_offset = 1;
C. 复制过程错误跳过机制:slave_skip_errors=1062,1032,1062代表键是重复条目,1032代表无法找到记录。
三、主从延迟
1. show slave status查看同步延迟时间Seconds_Behind_Master,单位秒;
2. slave_parallel_threads代表复制线程个数,读取和重放两个过程使用多线程;
3. shell读取主从同步延迟情况
#!/bin/bash while true do TIME_RESULT=`docker exec mariadb mysql -h127.0.0.1 -uroot -p123456 -e "show slave status\G;" | grep 'Seconds_Behind_Master'` echo -e "`date +%Y-%m-%d\ %H:%M:%S`${TIME_RESULT}" sleep 2 done
二、主主
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗