本文为mysql主从的简单配置,仅简单开始主从复制。创建新的master和slave服务,并使用binlog同步数据。
开启master的binlog
默认binlog是开启的,为了确认,可在master的mysql上执行:
mysql> show VARIABLES like '%log_bin%';
如果log_bin
显示为OFF
,则需要手动打开。
找到my.cnf
,添加或修改为:
log-bin=[filename]
然后重启mysql
即可。
在master上给slave创建账号
slave
在连接并拉取binlog时,需要有一个特殊的账号。
(master)
mysql> CREATE USER '[USERNAME]'@'[HOST]' IDENTIFIED BY '[PASSWORD]';
mysql> GRANT REPLICATION SLAVE ON *.* TO '[USERNAME]'@'[HOST]';
[USERNAME]、[HOST]、[PASSWORD]分别代表用户名、从机域名、密码。其中从机域名可以用‘%’通配符。
slave配置
在主从架构中,每个mysql服务都要有一个唯一的serverId,每个服务默认的id是1。这里master保持1不动,那就需要修改slave的serverId。
打开my.cnf,修改如下:
[mysqld]
server-id=2
保存文件,并重启slave mysql
。
获取master的binlog坐标
在master上,刷新所有的表,并加上锁:
mysql> FLUSH TABLES WITH READ LOCK;
查看mater状态:
mysql> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000003 | 73 | | |
+------------------+----------+--------------+------------------+
在slave上配置master的信息
如果之前启动过slave,需要先关闭:
扫描二维码关注公众号,回复:
10421280 查看本文章
mysql> stop slave;
然后开始配置:
mysql> CHANGE MASTER TO
-> MASTER_HOST='master_host_name',
-> MASTER_USER='replication_user_name',
-> MASTER_PASSWORD='replication_password',
-> MASTER_LOG_FILE='recorded_log_file_name',
-> MASTER_LOG_POS=recorded_log_position;
以上内容来自于上一步获取到的master信息。
最后开启slave:
mysql> start slave;
检查连接状态:
mysql> show slave status;
+--------------------+---------------------+------------------+-------------------+
| Slave_IO_Runing | Slave_Sql_Runing | Last_IO_Error | Last_Sql_Error |
+---------------------------------------------------------------------------------+
| Yes | Yes | 0 | |
+--------------------+---------------------+------------------+-------------------+
关注以上几个参数,如果Running
的状态部位Yes
,那Error
会有相应的错误信息,如果信息不明显,则需要打开错误日志文件查看,查找error日志文件如下:
mysql> show VARIABLES like '%log_bin%';
+----------------------+-----------------+
| log_bin_bas name | |
+----------------------------------------+
| log_bin_index | |
+----------------------+-----------------+
验证
在master
上添加数据,到slave
上确认是否也更新。
异常汇总
- 连接主机失败
MySQL8.0默认指定使用需要SSL的身份验证插件caching_sha2_password,而我们在创建同步复制账号时候没有指定REQUIRE SSL。为了降低这件事情的复杂性,我们选择了社区的解决方法,选择绕过SSL插件的验证,改为mysql_native_password验证来做同步。[ERROR] [MY-010584] [Repl] Slave I/O for channel '': error connecting to master '[email protected]:3306' - retry-time: 1 retries: 411, Error_code: MY-002061
mysql> CREATE USER slave1@'%' IDENTIFIED WITH 'mysql_native_password' BY '1234567890'; mysql> GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave1'@'%'; mysql> FLUSH PRIVILEGES;