准备两台服务器或者虚拟机
建议用linux服务器搭建
服务器记得在安全组放开端口,并且将防火墙的端口也放开,能省去百分之80的坑
在两台服务器上都安装mysql
mysql安装的方式:
- 原生安装也就是软件包方式安装
- docker安装
- docker-compose安装
我在这里选择的是原生的方式,因为把mysql这种重要的东西放在一个篮子(docker容器)里面始终是不安全的!!
开始安装mysql服务
如果是rpm方式安装的mysql想卸载
# 查看mysql安装的服务和依赖
rpm -qa| grep mysql
# 如果下面出现很多直接强行卸载 --nodeps为强行卸载
rpm -e --nodeps <列出的所有软件包名>
## =================上面只是卸载了服务,数据还在==========================
## 删除mysql的所有的数据,小心谨慎删除
whereis mysql
rm -rf <上面查找的目录文件>
卸载完成后会出现,没输出说明卸载完成
下载mysql的npm的包
# wget下载mysql的安装包源信息
wget http://dev.mysql.com/get/mysql80-community-release-el7-7.noarch.rpm
# rpm 安装源信息
rpm -ivh mysql80-community-release-el7-7.noarch.rpm
# 尝试使用 yum 安装MySQL
# 安装过程中,会提示让我们确认,一律输入 y 按回车即可
# 安装完成后,yum会自动覆盖自带的mariaDB,所以不需要我们手动卸载它
yum install mysql-community-server
# 检查一下刚才的安装是否成功
rpm -qa | grep mysql
出现下面说明服务安装成功
启动mysql服务
# 启动
systemctl start mysqld
# 第一次启动后,可以查看mysql初始化密码
grep 'temporary password' /var/log/mysqld.log
# 重启
systemctl restart mysqld
# 停止
systemctl stop mysqld
#查看状态
systemctl status mysqld
#开机启动
systemctl enable mysqld
systemctl daemon-reload
# 查看进程、版本信息
ps -ef | grep mysql
或
netstat -atp
# 登录
mysql -u root -p'密码内容'
# 查看所有表
show databases;
# 进入数据库
use 表名
# 查看所有表
show tables
我们安装的时候,并没有设置初始密码
所以 mysql 在第一次启动的时候,会自动初始化一个密码
通过以下这行代码,我们可以查看 mysql 自动初始化的密码:
# 第一次启动后,可以查看mysql初始化密码
grep 'temporary password' /var/log/mysqld.log
2023-11-29T14:49:53.577426Z 1 [Note] A temporary password is generated for root@localhost:
lGkFsKd=W3jc
2023-11-30T03:15:50.461054Z 6 [Note] [MY-010454] [Server] A temporary password is generated
for root@localhost: L8%=n+Hx=dAu
粘贴过去后,敲回车,看到这样就算密码输入成功了
修改mysql的默认密码
注意了,默认的密码策略,需要:大写英文 + 特殊字符 + 数字
ALTER USER 'root'@'localhost' IDENTIFIED BY 'xxx654Q.';
有些同学可能会觉得,老子密码想设置啥就设置啥,轮得到你这 mysql 在这里瞎BB?
那也是可以修改密码校验策略的
首先,安装密码验证插件
但是有个前提,你还是需要先按它的要求修改第一次密码,才能安装密码验证策略插件
1、先按照mysql的要求,修改一次密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'Root_123';
2、退出mysql
exit
3、重新登录mysql
mysql -u root -p'Root_123'
4、安装密码验证插件
install plugin validate_password soname 'validate_password.so';
5、查看是否启用了插件
select plugin_name, plugin_status from information_schema.plugins where plugin_name like 'validate%';
+-------------------+---------------+
| plugin_name | plugin_status |
+-------------------+---------------+
| validate_password | ACTIVE |
+-------------------+---------------+
输出这样的内容,表示成功启用
查看验证策略的键、值信息
SHOW VARIABLES LIKE 'validate_password%';
对于高版本的mysql,例如mysql 8,验证策略的key,是 validate_password.xxx
+--------------------------------------+-------+
| Variable_name | Value |
+--------------------------------------+-------+
| validate_password.check_user_name | ON |
| validate_password.dictionary_file | |
| validate_password.length | 8 |
| validate_password.mixed_case_count | 1 |
| validate_password.number_count | 1 |
| validate_password.policy | MEDIUM|
| validate_password.special_char_count | 1 |
+--------------------------------------+-------+
对于低版本的mysql,例如mysql 5.7,验证策略的key,是 validate_password_xxx
+--------------------------------------+-------+
| Variable_name | Value |
+--------------------------------------+-------+
| validate_password.check_user_name | ON |
| validate_password.dictionary_file | |
| validate_password.length | 8 |
| validate_password.mixed_case_count | 1 |
| validate_password.number_count | 1 |
| validate_password.policy | MEDIUM|
| validate_password.special_char_count | 1 |
+--------------------------------------+-------+
我们修改密码策略和密码长度
我的策略信息的 key ,是 validate_password.xxx
这个格式的,所以按照如下进行设置
set global validate_password_policy=0;
set global validate_password_length=1;
set global validate_password.policy=0;
set global validate_password.length=1;
好了,现在密码就可以按照你刚才配置的策略,来进行设置密码了
ALTER USER 'root'@'localhost' IDENTIFIED BY '你的新密码';
或者
set password for 'root'@'%'=password('你的新密码');
可视化工具的登录授权:(如果授权不成功,请查看防火墙)
操作完成上面的,现在还不能用可视化的客户端进行连接,需要我们进行授权:
# 连接 mysql 服务器
mysql -u root -p
# 进入 mysql 数据库
mysql> use mysql;
# 查看 user 表
mysql> select user,host from user;
# 修改 user 表中的 Host
mysql> update user set host='%' where user='username';
# 查看 user 表
mysql> select user,host from user;
# 刷新权限
mysql> flush privileges;
# 退出
mysql> quit;
操作完毕,接下来可以使用navicat或者sqlylog进行远程连接了.
第二台服务器同理,安装好mysql服务并且顺利运行起来,然后进行下一步
MySQL报错的解决Can‘t connect to local MySQL server through socket ‘varlibmysqlmysql.sock
参考文章:blog.csdn.net/m0_67390379…
开始配置主从环境
服务器配置
Master节点配置/etc/my.cnf
(master节点执行)
> vim /etc/my.cnf
[mysqld]
## 同一局域网内注意要唯一
server-id=1
## 开启二进制日志功能,可以随便取(关键)
log-bin=mysql-bin
## 复制过滤:不需要备份的数据库,不输出(mysql库一般不同步)
binlog-ignore-db=mysql
## 为每个session 分配的内存,在事务过程中用来存储二进制日志的缓存
binlog_cache_size=1M
## 主从复制的格式(mixed,statement,row,默认格式是statement)
binlog_format=mixed
Slave节点配置/etc/my.cnf
(slave节点执行)
> vim /etc/my.cnf
[mysqld]
## 设置server_id,注意要唯一
server-id=100
## 开启二进制日志功能,以备Slave作为其它Slave的Master时使用
log-bin=mysql-slave-bin
## relay_log配置中继日志
relay_log=edu-mysql-relay-bin
##复制过滤:不需要备份的数据库,不输出(mysql库一般不同步)
binlog-ignore-db=mysql
## 如果需要同步函数或者存储过程
log_bin_trust_function_creators=true
## 为每个session 分配的内存,在事务过程中用来存储二进制日志的缓存
binlog_cache_size=1M
## 主从复制的格式(mixed,statement,row,默认格式是statement)
binlog_format=mixed
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062
在master服务器授权slave服务器可以同步权限(master节点执行)
注意:在master服务器上执行
# mysql5.7的版本
mysql > mysql -uroot -pmaster的密码
# 授予slave服务器可以同步master服务 mysql8.0要求强行分开执行,现有用户再有权限
mysql > grant replication slave, replication client on *.* to 'root'@'slave服务的ip' identified by 'slave服务器的密码';
mysql > flush privileges;
# 查看MySQL现在有哪些用户及对应的IP权限(可以不执行,只是一个查看)
mysql > select user,host from mysql.user;
# mysql8.0版本有坑,一行命令变两行命令,并且密码有限制,老恶心了
# 先把密码的要求先去除掉,这个设置每次mysql重启就会失效,很烦
set global validate_password_policy=0;
set global validate_password_length=1;
set global validate_password.policy=0;
set global validate_password.length=1;
# 创建用户
CREATE USER '账号'@'从服务器ip' IDENTIFIED BY '你的密码';
# 授予权限
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO '账号'@'从服务器ip';
# 刷新权限
FLUSH PRIVILEGES;
查询master服务的binlog文件名和位置(master节点执行)
mysql> show master status;
slave进行关联master节点(slave节点执行)
- 进入到slave节点:
mysql > mysql -uroot -p你slave的密码
- 开始执行:
这里注意一下 master_log_file 和 master_log_pos 都是通过 master服务器通过show master status获得。
mysql> change master to master_host='master服务器ip', master_user='在master创建的账号',master_password='在master创建密码', master_port=3306, master_log_file='上面binlog文件名',master_log_pos=上面查到的偏移量;
在slave节点上查看主从同步状态(slave节点执行)
启动主从复制
mysql> start slave;
Query OK, 0 rows affected (0.00 sec)
再查看主从同步状态
mysql> show slave statusG;
这个错误是由于MySQL 8.0引入了一个新的身份验证方法:caching_sha2_password,它需要安全连接(1)(2)。如果您的连接不是通过SSL进行的,那么就会出现这个错误。
参考:blog.csdn.net/heisejingyu…
偏移量不对的话:
mysql> stop slave;
mysql> CHANGE MASTER TO MASTER_LOG_FILE='binlog文件名',MASTER_LOG_POS=偏移量位置;
mysql> start slave;
最后看到这样就成功了