ubuntu下MYSQL主从同步配置 (虚拟机)
背景:mysql主从同步只背八股文的话,讲道理是记不住的,还是实操一下会比较好
前提 :先确定mysql不同环境的ip
master节点 ip:192.168.1.227
slave节点ip:192.168.1.224
至于虚拟机怎么固定ip可以查看上一篇 【virtualbox下ubuntu 22.04固定ip设置】
mysql 怎么装具体看 【阿里云 基于ubuntu 22.02环境下LNMP 环境搭建】
主从复制条件
1)主库开启Binlog功能
2)主库要建立账号
3)从库要配置master.info(CHANGE MASTER to…相当于配置密码文件和Master的相关信息)
4)start slave 开启复制功能
主库操作:
修改配置文件
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
在文件最下面找到对应配置,打开server-id,binlog日志,并设置需要备份的数据库
解析:
server-id = 1 (多少是可以自定义的,保证同步的数据库之间唯一就可以了)
log_bin = /var/log/mysql/mysql-bin.log (binlog文件位置,生产环境下可能文件很多很大)
binlog_expire_logs_seconds = 86400 (binlog保存时长)
max_binlog_size = 100M (binlog文件大小)
binlog_do_db = test (需要同步的数据库)
binlog_do_db和binlog_ignore_db都被注释掉的话,则表示同步全部数据库,这里只同步test这个数据库
改完配置肯定是要重启生效。
然后通过命令行进到mysql
mysql -u root -p
在master主库中添加一个给slave同步的账号
CREATE USER 'sync'@'192.168.1.224' IDENTIFIED WITH mysql_native_password BY '123456';
赋予同步权限 192.168.1.224 是从库ip ,只能给这个ip登录
GRANT Replication Slave ON *.* TO 'sync'@'192.168.1.224';
执行sql刷新权限
flush privileges;
查看master主库状态
show master status;
先保存好sql语句,后面需要在从库上面执行:
192.168.1.227 是master主库ip,master_log_file 对应File, master_log_pos 对应 Position
CHANGE MASTER TO master_host = '192.168.1.227',
master_port = 3306,
master_user = 'sync',
master_password = '123456',
master_log_file = 'mysql-bin.000003',
master_log_pos = 5915;
从库操作
修改配置文件
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
在文件最下面找到对应配置,打开server-id,binlog日志,并设置需要备份的数据库
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
server-id = 2
relay-log = slave-relay-bin
relay-log-index = slave-relay-bin.index
增加上面的配置
然后 重启服务器
执行上面准备好的sql语句
再执行
start slave;
查看同步情况:
show slave status\G;
出现YES则表示成功
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
至此,主从同步设置完成。
注:网络问题导致同步出现失败的情况下,可以在从数据库里先停止同步
stop slave;
然后在主库重新查看 show master status;
重新执行
CHANGE MASTER TO master_host = '192.168.1.227',
master_port = 3306,
master_user = 'sync',
master_password = '123456',
master_log_file = 'mysql-bin.000003',
master_log_pos = 5915;
再开启同步
start slave;