1 自行准备好两个mysql8.0,并且保证可相互连接和访问。
ubuntu现在的软件包里,直接安装就是mysql8.0:apt-get install mysql-server
2 主机配置文件
mysql版本要一致,主从所有配置项都在 [mysqld] 节点下,小写字母。
打开配置文件,增加以下配置:vim /etc/mysql/mysql.conf.d/mysqld.cnf
建议配置前三个就行了,其它看情况。具体参数如下:
#[必须]主服务器唯一ID
server-id=1
#[必须]启用二进制日志,无后缀的文件名。也可以是本地的路径/log/bin-log
log-bin=bin-log
#[可选]设置需要复制的数据库名称,默认全部记录。
binlog-do-db=test_master
#[可选]设置不要复制的数据库
binlog-ignore-db=test
#[可选] 0(默认)表示读写(主机),1表示只读(从机)
read-only=0
#设置日志文件保留的时长,单位是秒
binlog_expire_logs_seconds=6000
#控制单个二进制日志大小。此参数的最大和默认值是1GB
max_binlog_size=200M
#[可选]设置binlog格式(STATEMENT是基于sql语句的复制,ROW是基于行的复制,MIXED是混合模式)
binlog_format=STATEMENT
保存完,重启mysql:systemctl restart mysql
3 从机配置文件
#[必须]从服务器唯一ID
server-id=2
#[可选]启用中继日志
relay-log=mysql-relay
#[可选] 0(默认)表示读写(主机),1表示只读(从机)
read-only=1
保存。重启mysql
4 主机:建立账户并授权
在linux里执行 sudo mysql 进入mysql的命令行
# 创建一个用户名slave1,密码123456
CREATE USER 'slave1'@'%' IDENTIFIED BY '123456';
# 授权
GRANT REPLICATION SLAVE ON *.* TO 'slave1'@'%';
#此语句必须执行。否则报错
ALTER USER 'slave1'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
# 使权限生效
flush privileges;
执行sql语句。用来查询Master的状态,并记录下File和Position的值。
show master status;
将出现如图:
注意:执行完此步骤后不要再操作主服务器MySQL,防止主服务器状态值变化。
5 从机:连接主机
(1) 主从复制的关键一步。执行以下sql语句。
CHANGE MASTER TO
MASTER_HOST='主机的IP地址',
MASTER_USER='主机用户名',
MASTER_PASSWORD='主机用户名的密码',
MASTER_LOG_FILE='bin-log.具体数字',
MASTER_LOG_POS=Position的具体值;
这时候会提示成功。如果不成功,请检查配置,或者之前启动过等原因。
(2) 执行sql语句。用来启动slave同步
START SLAVE;
这时候提示成功。如果报错,可以执行如下操作,删除之前的relay_log信息,然后重新执行 CHANGE MASTER TO …语句
reset slave; #删除SLAVE数据库的relaylog日志文件,并重新启用新的relaylog文件
(3) 执行sql语句,检查主从同步是否搭建成功
SHOW SLAVE STATUS\G;
你将看到以下成功的信息
如果失败了,请检查配置、防火墙等。
接下来,可以自己去主库创建test_master库,再创建些数据,然后去从库查看是否也有相同的数据库和数据。
其它
启动主从:start slave;
停止主从:stop slave;
重新配置主从:reset master; #删除Master中所有的binglog文件,并将日志索引文件清空,重新开始所有新的日志文件(慎用)