本次配置是在windows7 系统下 安装两个mysql ,原理都是相似的。
如果你已经安装两个mysql了,请跳过第一个步骤。
一. 安装两个mysql(版本5.7)
不要使用安装版本,因为它们会覆盖。我使用的是非安装版本,(你们可以去官网非登录下载)
新建两个文件夹存放解压之后的文件
1. 处理my.ini文件
修改或复制一份my-default.ini文件然后改名为my.ini; (如果mysql的目录下没有这个文件,直接新建即可,将以下内容直接复制到其中即可,注意:文件库的安装目录和数据的存放目录根据MySQL具体的安装目录而定),在建立一个ini文件时要注意:系统是否隐藏了后缀名。 在对应的位置,修改添加如下代码:
[mysql]
#设置mysql客户端默认字符集
default-character-set=utf8
[mysqld]
#设置3306端口
port=3306
character_set_server=utf8
# 设置mysql的安装目录
basedir=C:\Program Files\MySql3306\mysql-5.7.28-winx64
# 设置mysql数据库的数据的存放目录
datadir=C:\Program Files\MySql3306\mysql-5.7.28-winx64\data
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
# 允许最大连接数
max_connections=200
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
[WinMySQLAdmin]
# mysqld.exe运行位置
C:\Program Files\MySql3306\mysql-5.7.28-winx64\bin\mysqld.exe
2. 添加环境变量(可选)
操作如下:
1)右键单击我的电脑->属性->高级系统设置(高级)->环境变量
点击系统变量下的新建按钮
输入变量名:MYSQL_HOME_3306
输入变量值:C:\Program Files\MySql3306\mysql-5.7.28-winx64
#即为mysql的自定义解压目录。
2)选择系统变量中的Path
点击编辑按钮
在变量值中添加变量值:%MYSQL_HOME%\bin
注意是在原有变量值后面加上这个变量,用;隔开,不能删除原来的变量值
3. 将mysql注册为windows系统服务
1)从控制台进入到MySQL解压目录下的 bin 目录下:
2)初始化,如果没有data文件夹,在bin下运行命令:mysqld –initialize
3)输入服务安装命令:(MySQL3306代表服务名称,后面的是my.ini文件位置)
mysqld install MySQL3306 --defaults-file=" C:\Program Files\MySql3306\mysql-5.7.28-winx64\my.ini"
#解压目录下修改的my.ini文件
安装成功后会提示服务安装成功。
#注:my.ini文件放在MySQL解压后的根目录下
#移除服务命令为:sc delete MySql3306
4. 启动MySQL服务
方法一:
启动服务命令为:net start mysql3306
方法二:
打开管理工具 服务,找到MySQL3306服务。
通过右键选择启动或者直接点击左边的启动来启动服务。
5. 安装第二个mysql
安装步骤与上面一样。
需要注意的是:端口号需要变(可以变成3307),文件名和服务名要变成(MySql3307,随你心意)
当然,server-id也要变:服务器唯一ID,默认是1,一般取IP最后一段
二. 主从配置
1. 主从服务器分别作以下操作
版本一致
初始化表,并在后台启动mysql
修改root的密码
2. 修改主服务器master
修改my.ini(linux是/etc/my.cnf文件)
[mysqld]
log-bin=mysql-bin //[必须]启用二进制日志
server-id=1 //[必须]服务器唯一ID,默认是1,一般取IP最后一段
3. 修改从服务器slave
修改my.ini(linux是/etc/my.cnf文件)
[mysqld]
log-bin=mysql-bin //[不是必须]启用二进制日志
server-id=2 //[必须]服务器唯一ID,默认是1,一般取IP最后一段
4. 重启两个mysql
service mysqld restart;
5. 在主服务器上建立帐户并授权slave
进入主mysql:mysql –uroot –p –P 3306
输入密码 root
创建用于数据同步的账户(这是三条语句)( 192.168.0.%,代表匹配这个ip才能连接):
1. CREATE USER 'repl'@'192.168.0.%' IDENTIFIED BY '123456';
2. GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.0.%';
3. FLUSH PRIVILEGES;
查看二进制日志是否开启:
show global variables like 'log_bin';
查看master状态:
show master status;
6. 从数据库配置
执行同步语句(解释),
(192.168.0.168)指主mysql的ip,(master_user)指主mysql授权的用户,
(master_password)指主mysql授权的用户的密码,(master_log_file)二进制文件,
(master_log_pos)标记,
命令如下(这只是一条语句哈):
change master to master_host='192.168.0.168',
master_user='repl',master_password='123456',
master_log_file='mysql-bin.000001',
master_log_pos=514;
查看slave状态:
show slave status\G;
设置只读账户(可配):
create user 'pig'@'%' identified by '123456';// 创建用户
grant select on readwriteseparation.* to 'pig'@'%';// 设置只读
flush privileges;// 刷新
7. 注意
如果是同一个windows下(主mysql端口3306,从mysql端口3307)
从库(可改)(只是例子,随当前环境修改):
[mysql]
#设置mysql客户端默认字符集
default-character-set=utf8
[mysqld]
#设置3307端口
port=3307
character_set_server=utf8
# 必需(这个是次数据库,则配置2,而主数据库已经配了1)
server-id=2
# 设置mysql的安装目录
basedir=C:\Program Files\MySql3307\mysql-5.7.28-winx64
# 设置mysql数据库的数据的存放目录
datadir=C:\Program Files\MySql3307\mysql-5.7.28-winx64\data
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
# 允许最大连接数
max_connections=200
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# 强制跳过1062,1008错误
slave-skip-errors=1062,1008
[WinMySQLAdmin]
C:\Program Files\MySql3307\mysql-5.7.28-winx64\bin\mysqld.exe
如果从库:slave_sql_running:no
1. 重新启动slave:
slave stop;
set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
slave start;
2. My.ini 中配置slave-skip-errors=1062,1008 等,注意,不一定是这个,具体数据看slave状态中的no
如果从库:Slave_IO_Running: no
1. 在主mysql上执行刷新日志:
flush logs;
show master status\G;
2. 停止从库主从复制,并设置change
Stop slave;
CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000003',MASTER_LOG_POS=154;
start slave;