目录
一、mysql查询中文乱码问题
1. 进入mysql中进行查看数据库字符集
2. 修改 my.cnf 中的配置
3. 重启mysql容器,使得容器重新加载配置文件
4. 测试结果
二、主从同步中遇到的问题
2.1 Slave_IO_Running:Connecting 的解决方案
1. 确定宿主机防火墙开放mysql的映射端口
2. 检查配置文件中 server_id 是否唯一
3. 检查的同步状态
3.1 查看主服务器当前的二进制日志状态
3.2 进入从机中设置同步配置
2.2 authentication plugin 'caching_sha2_password' cannot be loaded
1. 可以查看 user 中的用户数据
2. 所以需要修改认证插件统一为 mysql_native_password
3. 查看是否修改成功编辑
由于字符集设置不正确导致。
解决方案:
show variables like 'character%';
|
连接到 MySQL 服务器的客户端使用的字符集 |
character_set_database |
当前数据库的默认字符集 |
character_set_results |
查询结果返回给客户端时使用的字符集 |
character_set_server |
MySQL 服务器使用的默认字符集 |
返回的字符集中,character_set_database
、character_set_server
等都为latin1
字符集,所以会出现乱码。
我的mysql是挂载在下 /app/mysql-master/conf, 所以我只需要到该路径下修改。
vim /app/mysql-master/conf/my.cnf
[client]
# 设置客户端的默认字符集为 utf8
default-character-set = utf8
[mysqld]
# 设置服务器的排序规则为 utf8_general_ci
collation-server = utf8_general_ci
# 设置服务器的默认字符集为 utf8
character-set-server = utf8
docker restart mysql-master
在同步测试过程中发现从机并没有同步主机的数据,并且查看从机的状态
# \G 可以将横向的结果集表格转换成纵向展示。
# slave status的字段比较多,纵向展示比友好
show slave status \G;
如果 Slave_IO_Running 和 Slave_SQL_Running 不为 Yes。
如果不是生产环境,可以直接简单粗暴先暂时关闭防火墙进行排错。
# 查看防火墙状态
systemctl status firewalld
# 暂时关闭防火墙
systemctl stop firewalld
# 永久关闭防火墙
systemctl disable firewalld
如果修改了配置文件需要重启容器使得生效,
docker restart mysql-master
ps:主机和从机都查看一遍
show master status;
如果已经启动和同步,需要先关闭同步
stop slave;
-- 格式:
-- change master to master_host='宿主机ip',master_user='主数据库配置的主从复制用户名',master_password='主数据库配置的主从复制用户密码',master_port=宿主机主数据库端口,master_log_file='主数据库主从同步状态的文件名File',master_log_pos=主数据库主从同步状态的Position,master_connect_retry=连接失败重试时间间隔(秒);
change master to master_host='192.168.xxx.xxx',master_user='slave',master_password='123456',master_port=3307,master_log_file='mall-mysql-bin.000001',master_log_pos=769,master_connect_retry=30;
-- 配置完成后在进行启动同步
start slave;
ps:根据主机配置进行设置。
最后查看主机中的主从复制的状态
# \G 可以将横向的结果集表格转换成纵向展示。
# slave status的字段比较多,纵向展示比友好
show slave status \G;
ps:如果同步不成功,可以在这里查看日志。
原因主要是由于MySQL 8.0版本引入了新的默认身份验证插件 caching_sha2_password
,而一些旧的MySQL客户端或库可能不支持这个插件,导致连接问题。解决方案 ↓↓↓ ↓↓↓
use mysql;
select host,user,plugin from user;
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
ALTER USER 'slave'@'%' IDENTIFIED WITH mysql_native_password BY '123456';