Mysql主从配置

为了提高数据库读写性能,读写分离的思想被提了出来。数据库被分成主数据库和从数据库,主数据库负责写,从数据库负责读。

拿Mysql来说,Mysql5.7版本自带了主从同步功能。比如需要将Mysql文件夹再多复制一份 

mysql_1是主,mysql_2是从。

修改mysql_1的my.ini配置文件。

[mysql]
default-character-set=utf8

[mysqld]
# 同台主机下多个mysql要修改成不同的端口
port=13306

basedir=D:/Users/dagger/IdeaProjects/software/mysqllist/mysql_1
datadir=D:/Users/dagger/IdeaProjects/software/mysqllist/mysql_1/data

character-set-server=utf8

default-storage-engine=InnoDB

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

# 修改server_id,确保每个mysql实例的server_id不一样
server_id=13306

log-bin=mysql-bin

# 要同步的数据库
binlog-do-db=test_0
binlog-do-db=test_1

# 不要同步的数据库
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
binlog-ignore-db=mysql
binlog-ignore-db=sys

[client]
port=13306
default-character-set=utf8
View Code

 修改mysql_2的my.ini配置文件 

[mysql]
default-character-set=utf8

[mysqld]
# 记得修改这个端口,避免端口冲突
port=13307

basedir=D:/Users/dagger/IdeaProjects/software/mysqllist/mysql_2
datadir=D:/Users/dagger/IdeaProjects/software/mysqllist/mysql_2/data

character-set-server=utf8

default-storage-engine=InnoDB

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

# server_id也不能重复
server_id=13307

# 二进制日志备份
log-bin=mysql-bin

# 要同步的表
replicate_wild_do_table=test_0.%
replicate_wild_do_table=test_1.%

# 不要同步的表,从节点不同步的数据库
replicate_wild_ignore_table=information_schema.%
replicate_wild_ignore_table=performance_schema.%
replicate_wild_ignore_table=mysql.%
replicate_wild_ignore_table=sys.%

[client]
port=13307
default-character-set=utf8
View Code

安装mysql主从节点的服务 

在mysql_1/bin目录下:./mysqld --install mysql_1 --defaults-file="mysql_1目录my.ini"

在mysql_2/bin目录下:./mysqld --install mysql_2 --defaults-file="mysql_2目录my.ini"

启动两个Mysql服务:

 连接主节点,创建一个用户,并授权replication(可以同步主节点上的数据)。给从节点登陆并同步主节点上的数据。

create user 'slave_1'@'%' identified by 'slave_1';
grant replication slave on *.* to 'slave_1'@'%' identified by 'slave_1';

 查看主节点的日志状态

show master status;

可以看到,test_0和test_1数据库已经配置好同步了。information_schema,performance_schema,mysql,sys被忽略。

连接上mysql_2数据库。创建同步任务。master_log_file对应 show master status; 的File。master_log_pos对应Position。

change master to
master_host='127.0.0.1',
master_user='slave_1',
master_password='slave_1',
master_port=13306,
master_log_file='mysql-bin.000008',
master_log_pos=154;

查看同步任务是否开启成功, SHOW SLAVE STATUS; Slave_IO_Running和Slave_SQL_Running都为Yes,开启成功。

如果Slave_IO_Running为No或者Connecting,则查看server_id是否重复,如果没有重复,则去mysql_2data目录下,将auto.cnf删除,然后重启mysql_2服务。

原文地址:https://www.cnblogs.com/dagger9527/p/11837148.html