MySQL主从复制
记一次主从复制配置,以防自己忘掉,方便以后查找。写的有不对的地方还望大家指正,谢谢!
1.主库配置
1.修改数据库配置文件my.cnf
文件
文件默认在/etc/mysql/my.cnf
[mysqld]
# 主从复制
log-bin=mysql-bin #开启二进制日志
server-id=1 #设置server-id 必须唯一
添加配置后需要重启MySQL
2.添加用户并查看binlog信息
-- 创建用于主从复制的用户,slave = 用户名 % = 代表所有IP都可以连接(可换成具体ip) 123456 = 密码
CREATE USER 'slave'@'%' IDENTIFIED with mysql_native_password by '123456';
-- 为该用户赋予权限
GRANT replication slave on *.* to 'slave'@'%';
-- 刷新配置
FLUSH PRIVILEGES;
-- 查看创建的用户是否存在
use mysql;
select user, host from user;
-- 查看当前binlog节点及position值
show master status;
获取当前主数据库中binlog节点
2.从库配置
1.修改数据库配置文件my.cnf
文件
[mysqld]
# 主从复制
server-id=2 #设置server-id,必须唯一
重启MySQL数据库
2.添加主数据库信息
-- 添加主数据库信息及读取binlog的节点信息
CHANGE MASTER TO MASTER_HOST = '192.168.158.128',
MASTER_USER = 'slave',
MASTER_PASSWORD = '123456',
MASTER_LOG_FILE = 'mysql-bin.000001',
MASTER_LOG_POS = 820
-- 启动从库
START SLAVE;
-- 查看主从状态
SHOW SLAVE STATUS;
查看主从同步状态,如果Slave_IO_Running = yes
并且Slave_SQL_Running = yes
则代表主从同步已经正常启动,若存在No,则需要根据Last_IO_Error
、Last_SQL_Error
、Last_Error
这三个字段对应的报错信息进行分析及修改。
3.验证
在主库创建数据表(这里用file_attachment
表)
-- 切换database
USE mysql;
-- 创建数据库表
CREATE TABLE `file_attachment` (
`id` bigint NOT NULL AUTO_INCREMENT,
`created` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
`deleted` datetime(3) DEFAULT NULL,
`updated` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
`version` int NOT NULL DEFAULT '0',
`file_path` varchar(63) COLLATE utf8_unicode_ci DEFAULT NULL,
`operator` varchar(63) COLLATE utf8_unicode_ci DEFAULT NULL,
`comment` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`file_name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
查看从库中是否有该数据库
注:新建表需要添加字符集,不然向表中添加数据时会报字符集不正确,致使主从同步暂停。