本文收录于csdn 我是沐风晓月
的博客专栏《数据库入门到精通》,该专栏主要收录MySQL基础语句及MySQL架构相关的内容。
如果你也正在学习数据库,可以关注我,一起学习,共同进步!
本次实验所用软件及系统版本如下:
软件 | 版本 |
---|---|
linux操作系统 | CentOS 7.9 |
master 节点IP | 192.168.1.41 |
node节点IP | 192.168.1.42 |
MySQL版本 | MySQL8 |
这里需要注意,每台服务器都需要安装MySQL8, 用到几个节点,就需要安装几台MySQL。
先从官网下载需要安装的MySQL8的yum源
所需要的rpm包。
[root@mufeng42 ~]# wget https://repo.mysql.com//mysql80-community-release-el7-7.noarch.rpm--2023-03-15 14:59:39-- https://repo.mysql.com//mysql80-community-release-el7-7.noarch.rpm
正在解析主机 repo.mysql.com (repo.mysql.com)... 23.36.48.238
正在连接 repo.mysql.com (repo.mysql.com)|23.36.48.238|:443... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度:11196 (11K) [application/x-redhat-package-manager]
正在保存至: “mysql80-community-release-el7-7.noarch.rpm”100%[============================================================================>] 11,196 --.-K/s 用时 0s 2023-03-15 14:59:39 (396 MB/s) - 已保存 “mysql80-community-release-el7-7.noarch.rpm” [11196/11196])[root@mufeng42 ~]# ls
anaconda-ks.cfg mysql80-community-release-el7-7.noarch.rpm#使用rpm -ivh命令进行安装
[root@mufeng42 ~]# rpm -ivh mysql80-community-release-el7-7.noarch.rpm
警告:mysql80-community-release-el7-7.noarch.rpm: 头V4 RSA/SHA256 Signature, 密钥 ID 3a79bd29: NOKEY
准备中... ################################# [100%]
正在升级/安装...1:mysql80-community-release-el7-7 ################################# [100
安装完成后,在本地可以查看到MySQL的rpm包
[root@mufeng42 ~]# yum list |grep mysql
在这里也能查看到MySQL的repo文件
[root@mufeng41 ~]# yum -y install mysql-community-server
[root@mufeng41 ~]# systemctl start mysqld
[root@mufeng41 ~]# systemctl status 设置开机自启
[root@mufeng41 ~]# systemctl enable mysqld
[root@mufeng41 ~]# cat /var/log/mysqld.log |grep password
2023-03-15T07:06:55.934416Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: m2&u!g*rB065
登录数据库进行密码修改:
[root@mufeng41 ~]# mysql -uroot -p'm2&u!g*rB065'
注意: 这里的m2&u!g*rB065
就是初始密码
重设密码:
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'Root!2#admin';
Query OK, 0 rows affected (0.00 sec)
设置密码完成后,就配置完了
MySQL8默认的密码策略要求比较高,如果你想了解MySQL8的密码策略,可以参考以下方法:
如果想要修改密码策略可以使用如下命令(这里不建议修改):
mysql> set global validate_password.length=6; # 修改密码长度
Query OK, 0 rows affected (0.00 sec)mysql> set global validate_password.policy='LOW'; # 修改密码严重级别:符合一个条件即可
Query OK, 0 rows affected (0.00 sec)
这里我们mengfeng41 作为master服务器
mysql -uroot -p’Root!2#admin’
mysql> create user 'slave21'@'%' identified with mysql_native_password by '123456';
Query OK, 0 rows affected (0.00 sec)
注:这里可以用修改密码命令更新一下密码,一样的密码也可以,否则有可能会报主从设置的时候可能会报密码相关错误。
mysql> grant replication slave on *.* to 'slave21'@'%';
Query OK, 0 rows affected (0.00 sec)mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)mysql> show grants for 'slave21'@'%';
+-------------------------------------------------+
| Grants for slave21@% |
+-------------------------------------------------+
| GRANT REPLICATION SLAVE ON *.* TO `slave21`@`%` |
+-------------------------------------------------+
1 row in set (0.00 sec)mysql>
mysql 的配置文件默认在/etc/my.cnf下,在配置文件中默认添加以下内容:
打开文件 vim /etc/my.cnf
[mysqld]
server-id=21
log-bin=mysql-bin
binlog-do-db=test
binlog-ignore-db=mysql
注释:
修改完成后,要重启数据库:
[root@mufeng41 ~]# systemctl restart mysqld
此时root的密码是: Root!2#admin
, 别输错了哦。
mysql -uroot -p'Root!2#admin'# 检查binlog日志是否开启
mysql> show variables like 'log_bin';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_bin | ON |
+---------------+-------+
1 row in set (0.00 sec)# 查看主库状态,获取从库必要的配置参数mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 | 157 | test | mysql | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)mysql>
show master status;
中出现的参数:
[root@mysql-slave ~]# vi /etc/my.cnf
[mysqld]
server-id=22 # 设置唯一id
[root@mufeng42 ~]# systemctl restart mysqld
[root@mufeng42 ~]# mysql -p'Root!2#admin'
change master to master_host='192.168.1.41',master_user='slave21',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=157;
注意,由于 MySQL8 密码插件的问题,这个问题同样会给主从配置带来问题,所以在 MySQL8 配置主从上,上面这行命令需要添加 get_master_public_key=1,完整命令如下:
mysql> change master to master_host='192.168.1.41',master_user='slave21',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=157,get_master_public_key=1;Query OK, 0 rows affected, 8 warnings (0.01 sec)
在这条命令中:
mysql> start slave;
Query OK, 0 rows affected, 1 warning (0.01 sec)mysql>
mysql> show slave status \G
*************************** 1. row ***************************Slave_IO_State: Master_Host: 192.168.1.41Master_User: slave21Master_Port: 3306Connect_Retry: 60Master_Log_File: binlog.000001Read_Master_Log_Pos: 157Relay_Log_File: mufeng42-relay-bin.000001Relay_Log_Pos: 4Relay_Master_Log_File: binlog.000001Slave_IO_Running: NoSlave_SQL_Running: YesReplicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 0Last_Error: Skip_Counter: 0Exec_Master_Log_Pos: 157Relay_Log_Space: 157Until_Condition: NoneUntil_Log_File: Until_Log_Pos: 0Master_SSL_Allowed: NoMaster_SSL_CA_File: Master_SSL_CA_Path: Master_SSL_Cert: Master_SSL_Cipher: Master_SSL_Key: Seconds_Behind_Master: NULL
Master_SSL_Verify_Server_Cert: NoLast_IO_Errno: 13114Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: 'Could not find first log file name in binary log index file'Last_SQL_Errno: 0Last_SQL_Error: Replicate_Ignore_Server_Ids: Master_Server_Id: 21Master_UUID: f7db0fb5-c2ff-11ed-b01c-000c290739ccMaster_Info_File: mysql.slave_master_infoSQL_Delay: 0SQL_Remaining_Delay: NULLSlave_SQL_Running_State: Replica has read all relay log; waiting for more updatesMaster_Retry_Count: 86400Master_Bind: Last_IO_Error_Timestamp: 230315 18:09:41Last_SQL_Error_Timestamp: Master_SSL_Crl: Master_SSL_Crlpath: Retrieved_Gtid_Set: Executed_Gtid_Set: Auto_Position: 0Replicate_Rewrite_DB: Channel_Name: Master_TLS_Version: Master_public_key_path: Get_master_public_key: 0Network_Namespace:
1 row in set, 1 warning (0.00 sec)
Slave_IO_Running、Slave_SQL_Running都为yes,说明启动成功。
如果出现 Slave_IO_Running: No
的情况:
root@mufeng42 ~]# find / -iname "auto.cnf"
/var/lib/mysql/auto.cnf
[root@mufeng42 ~]# rm -rf /var/lib/mysql/auto.cnf mysql> stop slave;
Query OK, 0 rows affected, 1 warning (0.00 sec)mysql> reset slave;
Query OK, 0 rows affected, 1 warning (0.01 sec)mysql> start slave;
Query OK, 0 rows affected, 1 warning (0.00 sec
按照上面的方式解决即可。
如果 Slave_SQL_Running: no
1、先停掉slave
mysql> stop slave;
2、跳过错误步数,后面步数可变
mysql> set global sql_slave_skip_counter=1;
3、再启动slave
mysql> start slave;
4、查看同步状态
mysql> show slave status\G;
mysql> create database aa;
Query OK, 1 row affected (0.00 sec)mysql> show databases;
+--------------------+
| Database |
+--------------------+
| aa |
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.00 sec)mysql>
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| aa |
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.00 sec)
💕 好啦,这就是今天要分享给大家的全部内容了,我们下期再见!
💕 博客主页:mufeng.blog.csdn.net
💕 本文由沐风晓月原创,首发于CSDN博客
💕 全力以赴,持续学习,不负如来不负卿
💕 喜欢的话记得点赞收藏哦