一主一从
准备:两台服务器A、B
操作:
1. 安装 mariadb
两台服务器分别安装好Mariadb
#安装mariadb sudo yum install mariadb-server #开启 sudo systemctl start mariadb #设置开机自动启动 sudo systemctl enable mariadb #查看状态 sudo systemctl status mariadb #设置初始密码 sudo mysql_secure_installation
2. 配置主从服务器
分别修改下my.cnf
服务器A:主
[mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock log_bin = /var/lib/mysql/bin-log log_bin_index = /var/lib/mysql/mysql-bin.index expire_logs_days = 7 server_id = 160 #主从配置 binlog_format = ROW
服务器B:从
[mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock log_bin = /var/lib/mysql/bin-log log_bin_index = /var/lib/mysql/mysql-bin.index expire_logs_days = 7 binlog_format = ROW # 主从配置 server-id=162
修改完成后重启Mariadb服务
systemctl restart mariadb.service
在主服务器上建立帐户并授权slave
gant replication slave on *.* to root@10.10.10.100 identified by '123456'; flush privileges; # ps: 10.10.10.100 为从服务器的ip # 123456 为从服务器的MySQL密码
3. 登录主服务器的mysql,查询master的状态
show master status;
4. 配置从服务器 Slave
change master to master_host='10.10.0.002',master_user='root',master_password='123456',master_log_file='bin-log.000002',master_log_pos=2759; # ps:10.10.0.002 为主服务器ip # bin-log.000002 为上面第三点的 File # 2759为上面第三点的 Position
# 启动从服务器复制功能 start slave; # 检查从服务器复制功能状态 show slave status\G
5. 为了保证主从数据一致,设置从服务器为只读
show global variables like 'read%'; // 查看 read_only 状态 set global read_only=1; // 当前环境生效,重启后失效 # 可以到 /etc/my.cnf 添加一行 read_only=1,然后重启即可
6. 其他
主从没有同步
#查看Master库状态 show processlist; show master status; #再到Slave上查看 show slave status\G
发现从库没有执行SQL
Slave_IO_Running: Yes Slave_SQL_Running: No
可以忽略错误后,继续同步,这种方法适用于主从库数据相差不大,或者要求数据可以不完全统一的情况,数据要求不严格的情况
stop slave; #表示跳过一步错误,后面的数字可变 set global sql_slave_skip_counter =1; start slave;
之后再用mysql> show slave status\G 查看
mysql> show slave status\G Slave_IO_Running: Yes Slave_SQL_Running: Yes
现在主从同步状态正常了
如果是需要同步主库之前的数据,需要先在主库备份好,然后将备份文件发送到从库的服务器,在从库执行后,才会重新同步
参考链接:
https://blog.csdn.net/qq_32248673/article/details/59055972
https://segmentfault.com/a/1190000038663356