1、配置mysql.conf
mysql版本要一致,主从所有配置项都在 [mysqld] 节点下,小写字母。
打开配置文件,增加以下配置:vim /etc/mysql/conf.d
/mysqld.cnf
建议配置前三个就行了,其它看情况。具体参数如下:
[mysql]
# mysql客户端默认字符集
default-character-set=utf8mb4
[mysqld]
# 服务端默认字符集
character-set-server=utf8mb4
# 禁止域名解析,只能使用ip,可以提高性能
# skip-name-resolve
# 3306端口
port = 3306
# 允许最大连接数
max_connections=200
# mysql的安装目录
basedir=/usr/local/mysql
# mysql的数据存放目录
datadir=/usr/local/mysql/data
# 新建表默认存储引擎
default-storage-engine=INNODB
#------主从配置------------
#[必须]主服务器唯一ID
server-id=2
#[必须]启用二进制日志,无后缀的文件名。也可以是本地的路径/log/bin-log
log-bin=bin-log
#[可选]设置需要复制的数据库名称,默认全部记录。
binlog-do-db=test_master
#[可选]设置不要复制的数据库
binlog-ignore-db=test
#[可选] 0(默认)表示读写(主机),1表示只读(从机)
#read-only=1
#设置日志文件保留的时长,单位是秒
binlog_expire_logs_seconds=6000
#控制单个二进制日志大小。此参数的最大和默认值是1GB
max_binlog_size=200M
#[可选]设置binlog格式(STATEMENT是基于sql语句的复制,ROW是基于行的复制,MIXED是混合模式)
binlog_format=STATEMENT
2、建立账户并授权
#登录mysql
mysql -uroot -p
# 创建一个用户名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,防止主服务器状态值变化。
3、从机:连接主机
主从复制的关键一步。执行以下sql语句。
CHANGE MASTER TO
MASTER_HOST='192.168.47.131',
MASTER_USER='slave1',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='bin-log.000001',
MASTER_LOG_POS=1367;
执行sql语句。用来启动slave同步
#用来启动slave同步
START SLAVE;
#执行sql语句,检查主从同步是否搭建成功
SHOW SLAVE STATUS\G;
看到两个Yes就说明配置成功。
如果配置不成功,可以执行如下操作,删除之前的relay_log信息,然后重新执行 CHANGE MASTER TO …语句配置。
reset slave; #删除SLAVE数据库的relaylog日志文件,并重新启用新的relaylog文件
如果失败了,请检查配置、防火墙、账号密码等。
接下来,可以自己去主库创建test_master库,再创建些数据,然后去从库查看是否也有相同的数据库和数据。
启动主从:start slave;
停止主从:stop slave;
重新配置主从:reset master; #删除Master中所有的binglog文件,并将日志索引文件清空,重新开始所有新的日志文件(慎用)