• MySQL8.0 一主二从


    1. 系统环境

    1. cat /etc/redhat-release
    2. CentOS Linux release 7.9.2009 (Core)
    3. 192.168.183.137 mysql-master
    4. 192.168.183.153 mysql-slave-1
    5. 192.168.183.154 mysql-slave-2
    6. # 关闭SELINUX
    7. sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
    8. setenforce 0
    9. # 关闭防火墙
    10. systemctl stop firewalld
    11. systemctl disable firewalld

    2. 安装MySQL

    三台机器均执行

    1. wget https://dev.mysql.com/get/mysql80-community-release-el7-7.noarch.rpm
    2. yum -y install mysql80-community-release-el7-7.noarch.rpm
    3. yum clean all && yum makecache
    4. yum -y install mysql-community-server
    5. systemctl start mysqld
    6. systemctl enable mysqld
    7. # 查看root密码
    8. grep 'temporary password' /var/log/mysqld.log
    9. mysql -uroot -ppassword
    10. # 修改root密码
    11. ALTER USER 'root'@'localhost' IDENTIFIED BY 'password';
    12. FLUSH PRIVILEGES;

    3. mysql-master配置文件修改

    1. vim /etc/my.cnf
    2. # 加入以下内容
    3. server_id=137 # server_id需要保证唯一性,不可与其他从服务器相同 如果为0会拒绝所有从服务器连接
    4. log-bin=mysql-bin # 设置同步的binary log二进制日志文件名前缀,默认是binlog
    5. binlog_ignore_db = information_schema # 不需要同步的数据库
    6. binlog_ignore_db = performance_schema # 不需要同步的数据库
    7. innodb_flush_log_at_trx_commit=1 # 我们每次事务的结束都会触发Log Thread 将log buffer中的数据写入文件并通知文件系统同步文件。这个设置是最安全的设置,能够保证不论是MySQL Crash 还是OS Crash或者是主机断电都不会丢失任何已经提交的数据。

    4. mysql-slave-1配置文件修改

    1. vim /etc/my.cnf
    2. # 加入以下内容
    3. server_id=153
    4. log-bin=mysql-bin
    5. binlog_ignore_db = information_schema
    6. binlog_ignore_db = performance_schema
    7. innodb_flush_log_at_trx_commit=1

    5. mysql-slave-2配置文件修改

    1. vim /etc/my.cnf
    2. # 加入以下内容
    3. server_id=154
    4. log-bin=mysql-bin
    5. binlog_ignore_db = information_schema
    6. binlog_ignore_db = performance_schema
    7. innodb_flush_log_at_trx_commit=1

    修改完成之后全部重启systemctl restart mysqld

    6. 主库创建复制用户

    1. mysql -uroot -ppassworn
    2. # 创建同步账户master节点 执行
    3. mysql> CREATE USER slave@'%' IDENTIFIED BY 'QAZqaz1234@';
    4. mysql> GRANT ALL PRIVILEGES ON *.* TO 'slave'@'%'WITH GRANT OPTION;
    5. mysql> CHANGE MASTER TO GET_MASTER_PUBLIC_KEY=1;
    6. mysql> FLUSH PRIVILEGES;
    7. mysql> SHOW MASTER STATUS;
    8. mysql> show master status;
    9. +------------------+----------+--------------+---------------------------------------+-------------------+
    10. | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
    11. +------------------+----------+--------------+---------------------------------------+-------------------+
    12. | mysql-bin.000001 | 873 | | information_schema,performance_schema | |
    13. +------------------+----------+--------------+---------------------------------------+-------------------+

    7. 配置从库

    1. mysql -uroot -ppassworn
    2. # slave-1和slave-2都是同样的操作
    3. mysql> change master to
    4. master_host='192.168.183.137',master_user='slave',master_password='QAZqaz1234@',
    5. master_log_file='master-bin.000001',master_log_pos=873;
    6. # 启动同步
    7. mysql> START SLAVE;
    8. mysql> FLUSH PRIVILEGES;

    mysql> SHOW SLAVE STATUS\G

    Slave_IO_Running: Connecting,

    报错:Error connecting to source 'slave@192.168.183.137:3306'. This was attempt 5/86400, with a delay of 60 seconds between attempts. Message: Authentication plugin 'caching_sha2_password' reported error: Authentication requires secure connection.

    发生这个问题的原因是在 mysql 8.0 以后,caching_sha2_password是默认的身份验证插件,而不是以往的mysql_native_password。在 MySQL Command Line 工具下修改 mysql 的默认身份验证插件即可。

    登录主库

    1. ALTER USER slave@'%' IDENTIFIED WITH mysql_native_password BY 'QAZqaz1234@';
    2. FLUSH PRIVILEGES;

    然后从库重新同步

    1. # slave-1和slave-2都是同样的操作
    2. mysql> STOP SLAVE;
    3. mysql> change master to
    4. master_host='192.168.183.137',master_user='slave',master_password='QAZqaz1234@',
    5. master_log_file='master-bin.000001',master_log_pos=1323;
    6. # 启动同步
    7. mysql> RESET SLAVE;
    8. mysql> START SLAVE;
    9. mysql> FLUSH PRIVILEGES;

    再次查看同步状况可以看到已经成功:

    mysql> SHOW SLAVE STATUS\G

    8. 测试

    在master节点上执行SQL语句

    1. create database db_test;
    2. show databases;

    在从库上面查看

    在master的db_test库里面创建表

    1. use db_test;
    2. # 创建一个my_user表:
    3. CREATE TABLE `my_user` (
    4. `id` tinyint(4) NOT NULL AUTO_INCREMENT,
    5. `account` varchar(255) DEFAULT NULL,
    6. `passwd` varchar(255) DEFAULT NULL,
    7. PRIMARY KEY (`id`)
    8. );
    9. # 插入数据:
    10. INSERT INTO `my_user` VALUES ('1', 'admin', 'admin');
    11. INSERT INTO `my_user` VALUES ('2', 'pu', '12345');
    12. INSERT INTO `my_user` VALUES ('3', 'system', 'system');
    13. # 查看插入数据
    14. select * from db_test.my_user;

    到从库上都能查到则说明没问题。

  • 相关阅读:
    大一学生期末大作业 html+css+javascript网页设计实例【电影购票项目】html网页制作成品代码
    机器学习-决策树算法
    【毕业设计】深度学习+opencv+python实现车道线检测 - 自动驾驶
    金九银十,给大家一点面试方面的建议
    UE4 Android、IOS监听应用状态
    windows11录屏功能详解,记录你的精彩时刻
    javaweb eclipse项目环境问题
    ArcObjects SDK开发 007 自定义App-Command-Tool框架
    javaEE---CSS
    学习笔记:机器学习之支持向量机(四、线性支持向量机-软间隔最大化对偶形式)
  • 原文地址:https://blog.csdn.net/m0_60169980/article/details/137959630