A、MySQL主从复制
主库:(192.168.1.202:33060)
编辑mysql配置文件my.cnf或者其包含文件,然后重启(开启主库二进制日志和设置服务器id)
[mysqld]
log-bin=mysql-bin
server-id=1
登入mysql命令行查看配置是否生效
设置授权用户
-- 创建授权用户repl,密码111111,指定用户允许登陆的主机地址,%表示不限制,localhost表示本地
CREATE USER 'repl'@'192.168.1.202' IDENTIFIED BY '111111';
-- 分配权限 db_name.tbl_name, *.* 表示所有库的所有表
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.1.202';
-- 刷新权限
FLUSH PRIVILEGES;
从库:(192.168.1.202:33061)
编辑mysql配置文件my.cnf或者其包含文件,然后重启(设置服务器id)
[mysqld]
server-id=2
开启同步:(在从库命令行中执行)
-- 根据主库配置信息设置参数,执行同步授权命令,根据自己实际情况配置
CHANGE MASTER TO
MASTER_HOST='192.168.1.202',
MASTER_PORT=33060,
MASTER_USER='repl',
MASTER_PASSWORD='111111',
MASTER_LOG_FILE='mysql-bin.000003',
MASTER_LOG_POS=771;
-- 启动slave同步进程
start slave;
-- 关闭同步进程
-- stop slave
Slave_IO_Running: Connecting
Slave_SQL_Running: Yes
表明从库同步进程已成功配置,可以在主库上创建数据库、表及数据来检测同步结果。
附,如果需要指定数据库或表进行复制,可以通过在mysql配置文件中设置相关参数来实现,有主库、从库2种配置方式:
1、主库中设置(主库bin-log记录指定数据库、表):
master开启二进制日志后默认会同步所有数据库,这时可以设置my.cnf参数来至指定同步数据库表
[mysqld]
# binlog-do-db 二进制日志记录的数据库(多数据库用逗号,隔开)
# binlog-ignore-db 二进制日志中忽略数据库 (多数据库用逗号,隔开)
# 忽略数据库
# binlog-ignore-db = mysql
# binlog-ignore-db = test1
# 只同步数据库
# binlog-do-db = test2
2、从库中设置(从库):
# 设定需要的数据库(多数据库使用逗号,隔开)
# replicate-do-db = db_name
# 设定需要忽略的数据库 (多数据库使用逗号,隔开)
# replicate-ignore-db = db_name
# 设定需要复制的表
# replicate-do-table = db_name.tbl_name
# 设定需要忽略的复制表
# replicate-ignore-table = db_name.tbl_name
# 支持通配符的replicate-do-table
# replicate-wild-do-table = foo%.bar%
# 支持通配符的replicate-ignore-table
# replicate-wild-ignore-table = foo%.bar%
#slave-skip-errors=1000,1001,1002 #跳过指定error no类型的错误
#slave-skip-errors=all #跳过所有错误
B、MySQL读写分离
通常MySQL主从集群为一主多从和多主多从的形式,我们可以把sql写操作发到主库执行、读操作发到从库执行,如果某些查询操作有很高的实时性要求,那么可以选择读主库,当然也可以引入缓存方案来解决这个问题。