insert
update
delete
等操作的时候(主要指表操作,当然也包括create数据库或者表等命令),操作内容会被写入binlog首选,安装一下MySQL
sudo apt install -y mysql-server mysql-client
如果装完了发现,不知道密码,也无法登陆MySQL,莫慌,看这里:ubuntu安装MySQL后无法登陆也无法修改密码
配置从库账号,其中 vien
和 password
换成你的用户名密码,用于从库连接主库,192.168.0.172
是从库的IP地址
GRANT REPLICATION SLAVE ON *.* to 'vien'@'192.168.0.172' identified by 'password';
刷新权限
FLUSH PRIVILEGES;
修改配置文件
vim /etc/mysql/my.cnf
在文件末尾追加:
[mysqld]
#服务器唯一ID
server-id=1
#启用二进制日志
log-bin=mysql-bin
# 同步的数据库,不写默认全部
binlog-do-db=test_db
# binlog日志保留的天数,清除超过10天的日志 防止日志文件过大,导致磁盘空间不足
expire-logs-days=10
#不同步mysql系统数据库。
binlog-ignore-db=mysql
还有就是默认是不开启远程连接的,需要注释掉绑定127.0.0.1连接的配置项:
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
找到这一行并且注释
bind-address = 127.0.0.1
改为
# bind-address = 127.0.0.1
重启服务
service mysql restart
查看当前日志状态
mysql> show master status;
打印结果
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 | 154 | | mysql | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
修改配置文件
vim /etc/mysql/my.cnf
在文件末尾追加:
[mysqld]
#服务器唯一ID
server-id=100
重启mysql
service mysql restart
MySQL内执行:
停止slave同步进程
stop slave;
执行同步语句
change master to master_host='192.168.0.141',master_user='slave0',master_password='slave0',master_log_file='mysql-bin.000001' ,master_log_pos=154;
master_host 是 主机IP,master_user 和 master_password 是之前在master主机上为slave创建的账户和密码,master_log_file 是master上的binlog日志名称,master_log_pos 是日志偏移量,上面show master status;
里有相关信息, master_port 是端口号,默认3306。
开启slave同步进程
start slave;
查看slave同步信息
show slave status\G;
截取部分打印:
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.0.141
Master_User: slave0
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000002
Read_Master_Log_Pos: 154
Relay_Log_File: hecs-x-xlarge-2-linux-20201117135522-relay-bin.000003
Relay_Log_Pos: 367
Relay_Master_Log_File: mysql-bin.000002
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
通过Slave_IO_Running
和Slave_SQL_Running
可以看到IO进程和SQL进程状态都是Yes,Slave_IO_State
显示正在等待master发送event,这说明大功告成了,接着我们来试一下效果。
在master上创建一个叫test的数据库
create database test;
然后查看一下:
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| test |
+--------------------+
5 rows in set (0.00 sec)
可以看到我们创建了一个叫test的数据库,然后去slave服务器看一下
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| test |
+--------------------+
5 rows in set (0.00 sec)
可以发现,同样也创建了一个叫test的数据库,可喜可贺,可口可乐,完。
viencoding.com版权所有,允许转载,但转载请注明出处和原文链接: https://viencoding.com/article/286