1.下载mysql社区版
MySQL :: Download MySQL Community Server
2.解压到两个文件夹:E:\mysql-8.0.23-winx64\mysql-master和E:\mysql-8.0.23-winx64\mysql-slave,
并分别在mysql-master目录和mysql-slave目录添加配置文件my.ini(端口不能相同)(不需要自建data目录)
[client]
port=3306
#设置客户端字符集
default-character-set=utf8
[mysqld]
#绑定IPv4
bind-address = 0.0.0.0
#设置端口号
port=3306
character_set_server=utf8
# 设置mysql的安装目录,即你解压缩安装包的位置
basedir=E:/mysql-8.0.23-winx64/mysql-master
# 设置mysql数据库的数据的存放目录
datadir=E:/mysql-8.0.23-winx64/mysql-master/data
# 允许最大连接数
max_connections = 200
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
default-storage-engine=INNODB
[WinMySQLAdmin]
Server = E:/mysql-8.0.23-winx64/mysql-master/bin/mysqld.exe
3.先处理mysql-master
a.初始化data目录
cd E:/mysql-8.0.23-winx64/mysql-master/bin
mysqld --initialize-insecure --user=mysql
b.安装mysql服务(注意端口冲突问题)(defaults-file可省略)
mysqld install mysql-master --defaults-file="E:/mysql-8.0.23-winx64/mysql-master/my.ini"
c.启动MySQL服务(可能存在服务启动失败)
net start mysql-master
d.登陆mysql(正常情况初始密码为空,但也可能提示存在密码错误导致登陆失败)
mysql -uroot -P3306
e.修改root账号密码(正常情况初始密码为空,但也可能提示存在密码错误导致登陆失败)
use mysql;
ALTER user 'root'@'localhost' IDENTIFIED BY '123456'
f.开启远程访问(不开启的话通过Navicat远程连接会报错Access denied for user)
update user set host = '%' where user = 'root';
FLUSH PRIVILEGES;
服务启动失败:
1.删除服务:sc delete mysql-master
2.删除根目录下data文件夹
3.初始化mysql:mysqld --initialize --console(会生成随机密码,下边登陆要用)
4.新建服务:mysqld --install mysql-master
5.开启服务:net start mysql-master
6.登陆:mysql -uroot -p第三步随机密码 -P3306
7.修改密码同上e步,开启远程访问同上f步
4.再处理mysql-slave
a.初始化data目录
cd E:/mysql-8.0.23-winx64/mysql-slave/bin
mysqld --initialize-insecure --user=mysql
b.安装mysql服务(注意端口冲突问题)
mysqld install mysql-slave --defaults-file="E:/mysql-8.0.23-winx64/mysql-slave/my.ini"
c.启动MySQL服务(可能存在服务启动失败)(defaults-file可省略)
net start mysql-slave
d.登陆mysql(正常情况初始密码为空,但也可能提示存在密码错误导致登陆失败)
mysql -uroot -P3307
e.修改root账号密码
use mysql;
ALTER user 'root'@'localhost' IDENTIFIED BY '123456';
f.开启远程访问(不开启的话通过Navicat远程连接会报错Access denied for user)
update user set host = '%' where user = 'root';
FLUSH PRIVILEGES;
服务启动失败:
1.删除服务:sc delete mysql-slave
2.删除根目录下data文件夹
3.初始化mysql:mysqld --initialize --console(会生成随机密码,下边登陆要用)
4.新建服务:mysqld --install mysql-slave
5.开启服务:net start mysql-slave
6.登陆:mysql -uroot -p第三步随机密码 -P3307
7.修改密码同上e步,开启远程访问同上f步
5.使用Navicat连接两个mysql数据库,同时为两个数据库创建名为test的数据库用于同步
6.在主库mysql-master的配置文件my.ini中添加(例如需要同步test库)
[mysqld]
log-bin=mysql-bin
server-id=3306
binlog-ignore-db=information_schema
binlog-do-db=test
log-bin | 表示启用binlog功能,并指定二进制日志的存储目录 |
server-id | 指定唯一的servr ID,两台数据库的server-id必须是不一样的数字,这里为了方便,用端口号作为server-id,一般线上环境可以用ip地址的最后一段作为server-id。 |
binlog-ignore-db | binlog日志不记录指定库的更新 |
binlog-do-db | binlog日志只记录指定库的更新 |
重启主库
net stop mysql-master
net start mysql-master
在Navicat中创建用于同步的账号
新建用户
过期策略设置为NEVER
“服务器权限”菜单勾选File和Replication Slave,点击保存
查看新建用户是否可用,如果能看到server_id为3306则表示可用。
(如果连不上,需要检查防火墙是否阻挡或者阿里云安全组是否有限制)
查看File是否存在(File是同步会使用到的binlog文件):
7.在从库mysql-slave的配置文件my.ini中添加(例如需要同步test库)
[mysqld]
log-bin=mysql-bin
server-id=3307
binlog-ignore-db=information_schema
replicate-do-db=test
replicate-ignore-db=mysql
log-slave-updates
slave-skip-errors=all
slave-net-timeout=60
replicate-do-db | 要进行主从复制的数据库名 |
replicate-ignore-db | 不进行主从复制的数据库名 |
log-slave-updates | 记录从库更新,允许链式复制( A-B-C )。当该从库作为其他库的主库时,需要添加该参数 |
重启从库
net stop mysql-slave
net start mysql-slave
在Navicat中配置同步
stop slave;
change master to master_host='172.16.162.213',master_port=3306,master_user='slave',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=0;
start slave;
master_host | 主库的ip地址 |
master_port | 主库的端口 |
master_user | 同步账号 |
master_password | 同步账号的密码 |
master_log_file | 开始同步的日志文件要与上边show master status的File一样 |
master_log_pos | 开始同步的日志的开始位置 |
查看同步状态
如果Slave_IO_Running、Slave_SQL_Running都为Yes,说明配置成功。
如果不为这两项,则后面的Last_SQL_Error字段会有详细的出错原因。
Slave_IO_Running是Connecting:
1.重新执行从库Navicat同步(注意bin文件序号要对应)
2.重启mysql-slave,一般可以解决。
3.还不行的话跳到第6步的查看新建用户是否可用
8.主从同步延迟(不用担心效率问题)
一级主从 50~100 us
二级主从 1.1~1.2 ms
REFERENCES: