第一步:在主服务器上新建 从服务器可以远程登录的账号,并且授权
mysql 8.0 以上创建用户和授权 需要分开执行;
创建账户: create user 'replicate'@'从服务器地址' identified by '123';
更改密码: set password for 'replicate'@'从服务器地址' = password('123');
赋予权限: GRANT REPLICATION CLIENT ON*.* TO 'replicate'@'从服务器地址' IDENTIFIED BY 'test';
权限生效:FLUSH PRIVILEGES;
注意: 如果授权出现 (mysql you need (at least one of) the SYSTEM_USER privilege(s)forthis operation)
原因是由于root用户没有SYSTEM_USER权限,把权限加入后即可解决:
grant system_user on*.* to 'root';
第二部:修改主服务器上Mysql 配置文件 并重启;
[mysqld]
server-id = 1 //唯一id
log-bin=mysql-bin //其中这两行是本来就有的,可以不用动,添加下面两行即可.指定日志文件
binlog-do-db = 想要同步的数据库 //记录日志的数据库
binlog-ignore-db = mysql //不记录日志的数据库
注意: Mysql 重启 出现 Failed to restart mysqld.service: Unitnotfound// 需要安装mysql-server 。
yum install-y mysql-server//重新加载某个服务的配置文件,如果新安装了一个服务,归属于 systemctl 管理,要是新服务的服务程序配置文件生效,需重新加载。
systemctl daemon-reload//启动Mysql
systemctl restart mysqld.service//如果需要设置mysql服务开机自启
systemctl enable mysqld.service
第三步: 修改从服务器上Mysql 配置文件 并 重启;
[mysqld]
server-id = 2log-bin=mysql-bin
replicate-do-db =想要同步的数据库
replicate-ignore-db =mysql,information_schema,performance_schema
注意: Mysql 重启 出现 Failed to restart mysqld.service: Unitnotfound// 需要安装mysql-server 。
yum install-y mysql-server//重新加载某个服务的配置文件,如果新安装了一个服务,归属于 systemctl 管理,要是新服务的服务程序配置文件生效,需重新加载。
systemctl daemon-reload//启动Mysql
systemctl restart mysqld.service//如果需要设置mysql服务开机自启
systemctl enable mysqld.service
第四步: 在主服务器Mysql 查看 master_log_file 和 master_log_pos 信息;
show master status\G
第五步: 在从服务器Mysql 进行授权刚刚在主服务建立的 replicate 账号;
mysql>stop slave; //先停步slave服务线程,这个是很重要的,如果不这样做会造成以下操作不成功。
mysql>change master to>master_host='主服务器地址',master_user='replicate',master_password='密码',> master_log_file='第四步的第一个信息',master_log_pos=第四步的第二个信息;
mysql> reset slave;
mysql> start slave;
第六步: 在从服务器Mysql 查看 配置情况;
show slave status\G
显示以下两个结果为成功:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
参考文档:
https://blog.humh.cn/?p=254 (Failed to restart mysqld.service: Unit not found)
https://blog.youkuaiyun.com/mbytes/article/details/86711508 (Mysql主从同步时Slave_IO_Running:Connecting ; Slave_SQL_Running:Yes的情况故障排除)