mysql主从复制配置

5.7和8.0的默认字符集是utf8mb4,  5.6的是utf8

1.mysql配置文件内容及含义阐述。

mysql主服务器配置文件 my.cnf

[client]
password = 123456
port = 3306
socket = /data/mysql/3306/mysql_3306.sock
default-character-set=utf8
#mysql8.0使用下面这个
#default-character-set=utf8mb4


[mysqld]
#给mysql8.0 配一下mysql_native_password
default_authentication_plugin = mysql_native_password
sql_mode=NO_ENGINE_SUBSTITUTION
port = 3306
socket = /data/mysql/3306/mysql_3306.sock
pid-file = /data/mysql/3306/mysql.pid
user = mysql
basedir = /usr/local/mysql
datadir = /data/mysql/3306/data
character_set_server=utf8
character_set_client=utf8
collation-server=utf8_general_ci
#mysql8.0使用下面这个
#character-set-server=utf8mb4
#collation-server=utf8mb4_unicode_ci



#lower_case_table_names = 0:表名区分大小写,且按照用户指定存储。
#lower_case_table_names = 1:表不区分大小写,使用小写存储。
#lower_case_table_names = 2:表不区分大小写,按照用户指定存储
lower_case_table_names=0
max_connections=1500
#server_id局域网内不能重复,可以设置为ip的末端号。
server_id=125
#开启二进制日志功能,名字可以自定义。
log-bin=mysql-bin
binlog_cache_size=1M
binlog_format=row
#slave_skip_errors=1062
slave_skip_errors=all
#设置日志保留天数
expire_logs_days=7
#设置日志文件最大大小
max_binlog_size=100M
max_allowed_packet = 1G

mysql从服务器配置文件 my.cnf

[client]
password = 123456
port = 3306
socket = /data/mysql/3306/mysql_3306.sock
default-character-set=utf8
#mysql8.0使用下面这个
#default-character-set=utf8mb4

[mysqld]
#给mysql8.0 配一下mysql_native_password
default_authentication_plugin = mysql_native_password
sql_mode=NO_ENGINE_SUBSTITUTION
port = 3306
socket = /data/mysql/3306/mysql_3306.sock
pid-file = /data/mysql/3306/mysql.pid
user = mysql
basedir = /usr/local/mysql
datadir = /data/mysql/3306/data
character_set_server=utf8
character_set_client=utf8
collation-server=utf8_general_ci
#mysql8.0使用下面这个
#character-set-server=utf8mb4
#collation-server=utf8mb4_unicode_ci



#lower_case_table_names = 0:表名区分大小写,且按照用户指定存储。
#lower_case_table_names = 1:表不区分大小写,使用小写存储。
#lower_case_table_names = 2:表不区分大小写,按照用户指定存储
lower_case_table_names=0
max_connections=1500
server_id=126
#从库设置只读,主库可读可写。
read_only=1
#设置不要复制的数据库(可设置多个)
#binlog-ignore-db=information_schema
#设置需要复制的数据库
#binlog-do-bd=test_db1
#binlog-do-db=test_db2

#开启二进制日志功能,以备Slave作为其它Slave的Master时使用
#log-bin=mysql-slave-bin
#binlog_cache_size=1M
#设置logbin格式
#binlog_format=ROW
#设置日志保留天数
#expire_logs_days=7
#设置日志文件最大大小
#max_binlog_size=100M
#relay_log配置中继日志,slave将master的binary log events拷贝到它的中继日志(relay log)
relay_log=edu-mysql-relay-bin
#slave_skip_errors=1062
#slave-skip-errors=1062,1053,1146 #跳过指定error no类型的错误
slave-skip-errors=all #跳过所有错误
max_allowed_packet = 1G

2.如果mysql服务已经开启,要重新启动来加载新的配置文件。

#关闭mysql服务
mysqladmin  -uroot -p -S  /data/mysql/3306/mysql_3306.sock  shutdown
或:
mysqladmin  -S /data/mysql/3306/mysql_3306.sock shutdown
如果mysql用户没shutdown权限(可以grant赋权或者直接改mysql.user赋权):
kill -SIGTERM pid-of-mysqld-process(也可以kill,慎用)
#再次开启mysql服务(2是错误输出,1是标准输出,2>&1是说错误输出等于标准输出,>/dev?null是说输出到空洞,也就是说输出要被丢弃)
mysqld_safe --defaults-file=/data/mysql/3306/my.cnf   2>&1 > /dev/null &

3.mysql主服务器配置:

#登录mysql服务
mysql -uroot -p -S /data/mysql/3306/mysql_3306.sock

#查看二进制日志是否开启(配置文件里配置)
mysql>show global variables like '%log%';
#显示下文为开启
log_bin ON

#查看主服务器server_id(这个是在配置文件设置的)
mysql>show global variables like '%server%';
server_id 125

#创建slave用户,'%'是任意IP都可以登录,安全性要求高的情况下,密码建议使用随机生成的字符串
mysql>create user 'slave'@'%' identified by '这是密码建议使用生成的随机字符串'

#REPLICATION CLIENT:授予此权限,复制用户可以使用 SHOW MASTER STATUS, SHOW SLAVE STATUS和 SHOW BINARY LOGS来确定复制状态。
#REPLICATION SLAVE:授予此权限,复制才能真正工作。
#复制账号需要以上两个权限。
mysql>grant replication slave, replication client on *.* to 'slave'@'%' identified by '这里填密码';

#mysql8.0 可以指定mysql_native_password   
#create user 'slave'@'%' identified  with mysql_native_password   by 'xxx'
#mysql8.0好像不需要加密码
#grant replication slave, replication client on *.* to 'slave'@'%' ;

# 刷新配置
mysql>flush  privileges;

#查看当前写的二进制日志文件File和偏移量Position(mysql从服务器配置需要该信息)
#配置文件和偏移量在从服务器配置以后,之后在主服务器运行的命令就会写入日志,然后从服务器也会读日志,然后运行相同的命令。
mysql>show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000002 |     2595 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

4.mysql从服务器配置:

#登录mysql服务
mysql -uroot -p -S /data/mysql/3306/mysql_3306.sock

#mysql从服务器执行填写主服务器ip,主服务器用来复制的用户名和密码,填写主服务器上查到的二进制日志文件名和偏移量。
mysql>change master to master_host='192.168.0.125',master_user='slave', master_password='这里填slave用户的密码',master_port=3306, master_log_file='mysql-bin.000002', master_log_pos=2595, master_connect_retry=30;

#开启主从复制(开启失败,可能是之前有 老的relay文件,删掉就可以了,实在不行,重启mysql服务)
mysql>start slave;

#查看从节点状态
#  \G,表示将查询结果进行按列打印,横向表格纵向输出,可以使每个字段打印到单独的行(更加规范)
#  \g 等价于 ';'
mysql>show slave status \G;
#返回的这两项都为Yes,表示主从复制正常开启。(如果有错误可以跳过)
Slave_IO_Running: Yes
Slave_SQL_Running: Yes


#如果遇到错误可以用下面的办法处理:
#停止主从复制:
mysql> stop slave;
#跳过错误:
mysql> set global sql_slave_skip_counter=1;
#启动slave
mysql> start slave;

5.测试主从复制

#mysql主服务器登录mysql服务
mysql -uroot -p -S /data/mysql/3306/mysql_3306.sock

#查看数据库
mysql>show databases;

#创建一个测试数据库
mysql>create database my_test;

#可以在mysql主服务器和mysql从服务器分别查看数据库(发现多了新创建的数据库my_test)
mysql>show databases;

#创建一个非root的日常用户(也是mysql主服务器运行)
mysql>create user 'my_user_1'@'%'  identified by '这里填想设置的密码';

#给my_test用户赋对my_test数据库任何操作的权力。
grant all on my_test.* to 'my_user_1'@'%';

#然后就可以使用my_test用户用navicat连接主数据库和从数据库了。
#因为主从复制的原因,从数据库也会被自动创建一个该名称该密码该权限的用户(不过从服务器只能读,不可以写。)

参考文章:
https://blog.csdn.net/andyguan01_2/article/details/107005913
https://blog.csdn.net/weixin_43760113/article/details/130682825
https://blog.csdn.net/qq_40813329/article/details/123213790
https://blog.csdn.net/shgh_2004/article/details/89332333


通过这个方法获取pod位置,就可以指定开始同步的文件和pod位置。来达到从某一个时间点同步的效果:

SHOW BINLOG EVENTS IN ‘mysql-bin.000001’;

在 MySQL 中,如果您知道一个二进制日志文件(master_log_file)的名称,但不知道其起始位置(master_log_pos),您可以通过执行 SHOW BINLOG EVENTS 命令来获取该文件的事件列表,包括每个事件的起始位置。

以下是使用 SHOW BINLOG EVENTS 的示例:

SHOW BINLOG EVENTS IN 'mysql-bin.000001';
#可以筛选前几行
SHOW BINLOG EVENTS IN 'mysql-bin.000001'  limit 10 ;

请将 'mysql-bin.000001' 替换为您要查询的二进制日志文件的实际名称。

执行上述命令后,将返回该二进制日志文件中所有事件的详细信息,包括每个事件的起始位置(End_log_pos)。

示例输出:

| Log_name | Pos | Event_type | Server_id | End_log_pos | Info |

| mysql-bin.000001 | 107 | Format_desc | 1 | 126 | Server ver: 8.0.23-debug-log, Binlog ver: 4 |
| mysql-bin.000001 | 126 | Previous_gtids | 1 | 171 |


在上述输出中,`End_log_pos` 列显示了每个事件的结束位置。您可以查看最后一个事件的 `End_log_pos`,并将其作为下一个二进制日志文件的起始位置。请注意,这是该二进制日志文件中所有事件的最后一个位置,而不仅仅是一个事件的位置。

mysql8.0认证【MySQL】Authentication plugin 'caching_sha2_password' reported error

使用MySQL8.0.30创建主从,启动从库的时候报错:

1
2
Last_IO_Errno:2061
Last_IO_Error:error connecting to mater 'repl@xxxxx:3308' - retry-time:60 retries:1 massage:Authentication plugin 'caching_sha2_password' reported error:Authentication require secure connection.


原因是在MySQL8之前,身份验证插件默认是mysql_native_password;而从8.0开始,换成了caching_sha2_password。



1.可以在mysql server的配置文件中,继续使用旧的验证插件。在配置文件中即可。

1
2
[mysqld]
default_authentication_plugin=mysql_native_password


2.也可以在用户级别进行修改,修改用户使用的验证插件即可:

1
2
3
# 相当于重新设置密码
alter user '[username]'@'[host]' identified with mysql_native_password by '[password]';


3.也可以使用GET_MASTER_PUBLIC_KEY=1,请求公钥:

1
mysql> change master to master_host='xxxx', master_port=3308, master_user='repl', master_password='pwd',master_auto_position = 1,get_master_public_key=1;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

confined.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值