两台服务器mysql实现主从复制
准备步骤:
两台已经安装好mysql数据库的服务器
上一篇有提到安装mysql5.7.24
主服务器配置:
创建mysql远程登录角色和权限:
mysql> create user 'realfake'@'106.12.203.18' identified by '123456';
Query OK, 0 rows affected (0.01 sec)
mysql> grant replication slave on *.* to 'realfake'@'106.12.203.18' identified by '123456';
Query OK, 0 rows affected, 1 warning (0.01 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)
主mysql的my.cnf添加:
# # server-id 唯一的服务辨识号,数值位于 1 到 2^32-1之间.
# # 此值在master和slave上都需要设置.
# # 如果 “master-host” 没有被设置,则默认为1, 但是如果忽略此选项,MySQL不会作为master生效.
server-id = 1 #[必须]服务器唯一ID,默认是1
##------------------------------------------master上的配置开始------------------------------------------------##
# #
# # log-bin 打开二进制日志功能. #
# # 在复制(replication)配置中,作为MASTER主服务器必须打开此项 #
# # 如果你需要从你最后的备份中做基于时间点的恢复,你也同样需要二进制日志. #
log-bin = mysql-bin #[必须]启用二进制日志 #
# # 需要开启生成二进制日志记录相关配置,配置在需要被复制的服务器上,即:master #
binlog-do-db = test_db #指定对名称为test_db的数据库记录二进制日志 #
#binlog-ignore-db = mysql #指定不对名称为mysql的数据库记录二进制日志 #
#binlog-ignore-db = information_schema #指定不对名称为information_schema的数据库记录二进制日志 #
binlog_format = mixed #binlog日志格式,mysql默认采用,如果从服务器slave有别的slave要复制那么该slave也需要这一项#
expire_logs_days = 7 #超过7天的binlog删除### #
# #
##-------------------------------------------master上的配置结束-----------------------------------------------##
skip-external-locking #MySQL选项以避免外部锁定。该选项默认开启
default-storage-engine = InnoDB #默认存储引擎
lower_case_table_names = 1 #忽略表大小写
从服务器配置:
从mysql的my.cnf
# # server-id 唯一的服务辨识号,数值位于 1 到 2^32-1之间.
# # 此值在master和slave上都需要设置.
# # 如果 “master-host” 没有被设置,则默认为1, 但是如果忽略此选项,MySQL不会作为master生效.
server-id = 2 #[必须]服务器唯一ID,默认是1
##-------------------------------------------slave上的配置开始------------------------------------------------##
# #
# # replicate-do-db 需要做复制的数据库,如果复制多个数据库,重复设置这选项即可master上不需要此项,slave上需要 #
replicate-do-db = test_db #复制名称为test_db的数据库 #
# # replicate-ignore-db 不需要复制的数据库,如果要忽略复制多个数据库,重复设置这个选项即可 #
#replicate-ignore-db = mysql #不需要(忽略)复制名称为mysql的数据库 #
#replicate-ignore-db = information_schema #不需要(忽略)复制名称为information_schema的数据库 #
# #
# 如果你在使用链式从服务器结构的复制模式 (A->B->C), #
# # 你需要在服务器B上打开此项. #
# # 此选项打开在从线程上重做过的更新的日志, #
# # 并将其写入从服务器的二进制日志. #
# # 默认值为OFF;设置log_slave_updates = 1即表示开启 #
#log_slave_updates = 1 #
# #
##------------------------------------------slave上的配置结束-------------------------------------------------##
skip-external-locking #MySQL选项以避免外部锁定。该选项默认开启
default-storage-engine = InnoDB #默认存储引擎
lower_case_table_names = 1 #忽略表大小写
连接配置:
登录主mysql查看状态:
show master status;
登录从mysql,
stop slave;
reset slave;
change master to
master_user='realfake',
master_password='123456',
master_host='118.25.178.145',
master_port=3306,
master_log_file='mysql-bin.000005',
master_log_pos=858;
内容分别为在主mysql上创建的角色、密码、主服务器ip,还有就是主mysql status的file和pos,更新后
start slave;
查看连接结果:
登录从mysql,
mysql> show slave status\G
出现如下则连接成功:
测试主从复制
在主mysql中的test数据库中添加表:
mysql> create table test_realfake(id int auto_increment primary key,name varchar(255));
Query OK, 0 rows affected (0.10 sec)
查看从mysql的数据库中是否有更新:
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| test |
| test_realfake |
| testtable |
+----------------+
3 rows in set (0.01 sec)
mysql> desc test_realfake;
+-------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(255) | YES | | NULL | |
+-------+--------------+------+-----+---------+----------------+
2 rows in set (0.00 sec)
测试成功。
希望对大家有帮助。