主从服务器数据库尽量安装同一版本,避免兼容性造成的一些错误产生
vim /etc/my.cnf
注意:我的数据库配置文件为/etc/my.cnf,大家按照自己的去修改就行
max_allowed_packet = 64M
transaction_isolation = READ-COMMITTED
tmp_table_size = 512M
# 设置字符集为utf8
character_set_server = utf8
# 不区分大小写
lower_case_table_names = 1
# 允许最大连接数
max_connections = 9600
server-id=1
# Binary Logging.
# log-bin 二进制日志
log-bin=mysql-bin
#只保留7天的二进制日志,以防磁盘被日志占满
expire-logs-days=7
#不备份的数据库
binlog-ignore-db = mysql
binlog-ignore-db = information_schema
binlog-ignore-db = performation_schema
binlog-ignore-db = sys
#需要做复制的数据库名,如果有多个,复制binlog-do-db即可
binlog-do-db = test
注意:?修改完配置之后重启数据库
systemctl restart mysqld
作用:用于从库同步复制,
CREATE USER 'slave'@'%' IDENTIFIED BY 'Cntcitc@2023';
作用:授予复制、同步访问的权限
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
?
SELECT * FROM mysql.user;
show variables like 'log_bin';
show master status;
注意:查询结果File对应的字段一定要记住,配置从库的时候需要使用
vim /etc/my.cnf
注意:我的数据库配置文件为/etc/my.cnf,大家按照自己的去修改就行
character_set_server = utf8
lower_case_table_names = 1
max_allowed_packet = 64M
transaction_isolation = READ-COMMITTED
tmp_table_size = 512M
# 允许最大连接数
max_connections = 9600
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
server-id=2
log-bin=mysql-bin
binlog-format=ROW
注意:(1)server-id=2一定要配置
(2)修改完配置之后重启数据库
systemctl restart mysqld
stop slave
CHANGE MASTER TO MASTER_HOST='172.16.40.5',MASTER_PORT=3306,MASTER_USER='slave',MASTER_PASSWORD='Cntcitc@2023',MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=617;
注意:MASTER_LOG_FILE参数要配置成主库查询master状态中的File的值,其他参数配置成自己的就行,比如主库IP,端口,以及共享用户和密码。?
show slave status;
注意:slave_io_status状态为空,忘记开启start slave ;开启后查看状态正常。
start slave
? ? ? ? I/O的作用是从master 3306端口上把它的binlog取过来(master修改的内容会写到自己的binlog等待slave更新),然后写到本地的relay-log,而SQL thread则是去读本地的relay-log,再把它转换成本Mysql所能理解的语句,于是同步就这样一步一步的完成,start slave 之后,SLAVE_IO_RUNNING值为Yes,SLAVE_SQL_RUNNING为Yes。?
show slave status;
主库新建数据库test后新建t_user表,查看从库,未发现有新库及新表创建。查看同步状态后发现SLAVE_SQL_RUNNING为NO。
可执行以下三个命令,可重复执行,在重复执行两次之后值才改为Yes,从库手动创建表t_user,主库在t_user新增数据后,从库t_user表中同步数据成功。
stop slave;
set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
start slave;
注意:我执行了一次之后就成功了,大家执行一次后查看一下状态
show slave status;
查看同步状态,看SLAVE_SQL_RUNNING是否为NO
show slave status;
?还可以查看为NO原因: