一、主从复制的准备
要求主数据库和从数据库的版本号一直,比如都是mysql 5.7.x。最后一位可以不相同,但是前面两位版本号需要一样。
主从复制的原理,主数据库配置二进制日志文件,将数据库的变更操作都计入二进制日志,从数据库读取二进制日志,然后同步到从数据库中,保证从数据库与主数据库数据的一致性。
二、主从复制的配置
1.配置文件(my.cnf)
主数据库:
[mysqld]
server-id=1 # 此处设置服务器的id,一般习惯于把主数据库设置为1
log-bin=/mysqlbin # 最好不要与data文件在一个路径,这里文件名推荐使用mysqlbin。linux要注意mysql账户要有读写的权限。
binlog-ignore-db=# 不要进行主从复制的数据库名。通常mysql数据库包含了账号信息,不想也要主从复制。
binlog-do-db=# 需要进行主从复制的数据库名,这个参数和上面的参数一般只要设置一个,也可以两个都使用。
从数据库
在配置文件中只需修改
[mysqld]
server-id=2 # 只要是不和主数据库一样的id就可以了。
以下的参数写在配置文件中也可以,但是不推荐写在配置文件中,使用数据库命令设置更方便一些。
master-host=# 主服务器的地址
master-user=# 用于复制的账户,这里是指主服务器写账户。到这一步还没有新建账户,所以可以先不用写,等新建完账户后再写。
master-password=# 账户密码,现在也先不用写,生成账户后再写。
master-port=3306 # 数据库端口号,一般默认是3306,如果没修改过不用写。
2.命令设置
主数据库:
GRANT REPLICATION SLAVE ON . TO 'username'@'hostname' IDENTIFIED BY 'password'; # username 是账号名,hostname是允许从数据库的IP地址,如果不限制可以写%,password账号密码。这些的信息将来可以写入从数据库的配置文件中。
FLUSH PRIVILEGES;
SHOW MASTER STATUS; # 查看主数据库配置状态信息。主要记录:File和Position的值。
从数据库:
CHANGE MASTER TO
MASTER_HOST=, # 如果配置文件中已经写入,这里就不需要了。
MASTER_USER=, # 如果配置文件中已经写入,这里就不需要了。
MASTER_LOG_FILE=, # 上一步在主数据库中使用SHOW MASTER STATUS命令查出的File参数值。
MASTER_LOG_POSITION=; # 上一步在主数据库中使用SHOW MASTER STATUS命令查出的Position参数值。
START SLAVE; # 启动主从复制。
SHOW SLAVE STATUS; # 查看从服务器的启动状态,重点查看: Slave_IO_Running: Yes,Slave_SQL_Running: Yes两个参数必须是Yes,如果不是的话就表示配置失败,需要重新检查修改配置。
注意,如果需要修改从数据库配置,需要先执行STOP SLAVE命令结束主从复制,然后进行修改,修改完成后再重新启动START SLAVE
以上这些是基本的配置,还有一些参数没有深入研究先不写了,将来用到慢慢完善。