mysql8 主从实践

mysql8 主从实践

主机环境

192.168.1.204(master)
192.168.1.203(slave-1)
192.168.1.202(slave-2)

下载 mysql8

下载地址

Yum Repository下载地址

安装

Yum 安装文档

# 在三台机器上都按以下步骤安装 mysql
# 添加 MySQL Yum Repository
sudo rpm -Uvh mysql80-community-release-el7-3.noarch.rpm
# 安装mysql
sudo yum install mysql-community-server -y

Master

启动

sudo systemctl start mysqld.service
# 查看状态
systemctl status mysqld.service

登录、修改密码

# 初次启动时,mysql会默认创建 'root'@'localhost' 账号,查看并修改自动生成的密码
grep 'temporary password' /var/log/mysqld.log

  2020-11-30T03:03:31.947703Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: uWblh>vd#6%L

# 登录 并修改密码  WITH mysql_native_password 表示指定加密插件
# MySQL8.0 引入并默认使用新插件 caching_sha2_password,导致后续配置比较麻烦,建议设置密码时指定 mysql_native_password
mysql -uroot -p
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'Learn@123!';

创建同步账号

# 创建同步账号
CREATE USER 'slave'@'192.168.1.203' IDENTIFIED WITH mysql_native_password BY 'Learn@123';
CREATE USER 'slave'@'192.168.1.202' IDENTIFIED WITH mysql_native_password BY 'Learn@123';

# 授予同步权限
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'192.168.1.203';
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'192.168.1.202';
# 刷新权限
FLUSH PRIVILEGES;

修改配置

vim /etc/my.conf

# 配置全局唯一节点
server-id=204


# binlog 配置

# mysql 8.0 默认已经开启了 binlog
# 配置binlog文件名称
log-bin=mysql-bin

# 需同步的数据库,如不配置则全部同步
# binlog-do-db=test_db

# 参考资料:https://blog.csdn.net/vkingnew/article/details/81953350
# binlog日志保留天数,下面的 天 或 秒 指定一个即可,mysql 8.0 默认使用秒,30天时间
# expire-logs-days=10
# binlog_expire_logs_seconds = 2592000

# 刷新策略,mysql 8.0 默认是此配置
# innodb_flush_log_at_trx_commit=1 
# sync_binlog=1

#------- my.conf end ----

# 重启mysql
systemctl restart mysqld.service

锁表

新开一个会话,锁定所有表,主从同步完成前,不接受新数据

FLUSH TABLES WITH READ LOCK;

查看 master 状态

mysql> show master status \G;

Slave

启动

同master

配置

vim /etc/my.conf
# 配置全局唯一节点
server-id=203 | 202

# ----- my.conf end ----

# 重启
systemctl restart mysqld.service

手动同步数据

如果 Master 上已经有业务数据,需先将数据导出,手动同步至 Slave 上

-- 备份 master 数据,没有--master-data参数,需新启动一个客户端手动锁定所有表(即上面的锁表会话)
mysqldump --all-databases > dbdump.sql
--  --master-data=2 参数会在生成的sql中自动添加 'CHANGE MASTER TO...' 的语句
mysqldump --all-databases --master-data=2 > dbdump.sql

-- slave 导入数据
mysql source < dbdump.sql
mysql < dbdump.sql

配置 Master

mysql> CHANGE MASTER TO
MASTER_HOST='192.168.1.204',
MASTER_USER='slave',
MASTER_PASSWORD='Learn@123',
MASTER_LOG_FILE='mysql-bin.000001', -- 对应 show master status中的值
MASTER_LOG_POS=156; -- 对应 show master status中的值

开启同步

show slave status\G;
start slave;
show slave status\G;

-- 若出现异常,可使用 stop slave,修改配置后再执行 start slave

Master 释放全局锁

-- 同步完成时推出即可释放锁(最后阶段)
UNLOCK TABLES;

创建业务账号

# 在 Master 创建业务账号
CREATE USER test IDENTIFIED WITH mysql_native_password BY 'Learn@123';
# 授权, dbname替换为业务数据库名
GRANT ALL PRIVILEGES ON {dbname}.* TO 'test'@'%' WITH GRANT OPTION;
# 刷新权限
FLUSH PRIVILEGES;

问题

修改root密码后登录提示密码错误

-- 指定密码插件 mysql_native_password
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'Learn@123';

账号连接被拒绝


vim /etc/my.con
# 屏蔽密码登录
skip-grant-tables

# 重启
systemctl restart mysqld.service

# 再次登录,输入密码时直接回车,然后按正确方式修改密码即可
mysql -uroot -p

#修改密码
flush privileges; # 先执行,否则 alter 报错
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'Learn@123';

## 去掉 skip-grant-tables,重启mysql

主从报错:Authentication plugin ‘caching_sha2_password’ reported error:Authentication require secure connection

主从复制报错2061

主、从库账号重复问题

https://blog.csdn.net/weixin_42942173/article/details/103742788

Github

Github地址:mysql主从实践, 欢迎 star。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值