前一段时间,配置了主从库,最近突然想起,这个主从库怎么配置的也忘个差不多了,今天只好在自家的小电脑上再来一遍。写了本地 win10系统 MySql主从库配置一文,现在翻回去看时,总有一些地方含糊,还有一些地方没有说清楚。
这几天晚上在家里试着配置个主从库,本以为很简单,一个晚上能够搞定,可还是弄了好几个晚上,第一个晚上,网速不给力,下载压缩包的网站都打不开,只能等到第二天一早下载,早上时,网速超级的快,几分钟就下载好了。
第二天晚上,继续配置主从库,配置了好几次,总是搞不清从库的data从哪里来的,又查了资料才知道,拷贝主库已经生成的data便可,只是需要删除一个auto.cnf文件。
反反复复配置了好几次,中间又遇到了主从库server_id重复的问题,这个问题是因为提前在配置文件中写了server_id引起的。看来还是需要按照步骤来,一步一步的配置,有些配置不能提前设置,提前设置了,后面就出问题。
现在还是把主从库配置的步骤捋一捋:
1.先下载压缩包,解压压缩包
2.主库、从库数据库文件命名,建立配置文件及data文件夹
3.配置环境变量
4.注册主从库服务,生成系统文件及data文件夹下的系统文件,重启
5.更改配置文件,重置密码后,重启,复原配置文件,再重启;
6.主库配置,从库配置,查看配置参数
7.主从配置的测试
首先,打开mysql的官网,找个适合电脑系统的压缩包下载。来到download下的community,在community下选择MySql community server,在这一页里的最下面找到适合当前系统的版本,https://dev.mysql.com/downloads/file/?id=487427,进行下载操作。
图-1图-2
图-3
第二步,解压压缩文件,拷贝成两个,一个是主库命名为mysql-master,一个从库命名为mysql-slave,并在各自的文件夹下建立data文件夹,以及my.ini配置文件,两个的配置文件除了端口号、data文件的存放目录不一样以外,其他的都是一样的。
my.ini文件内容如下:
#代码开始
[Client]
#设置3306端口
port = 3306
default-character-set=utf8
[mysqld]
#设置3306端口
port = 3306
#设置mysql服务器字符集
collation-server=utf8_general_ci
# 设置mysql的安装目录
basedir=c:\database\mysql-master
# 设置mysql数据库的数据的存放目录
datadir=c:\database\mysql-master\data
# 允许最大连接数
max_connections=200
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8
# 创建新表时将使用的默认存储引擎,支持事务
default-storage-engine=INNODB
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
#重新设置密码时,将此放开,设置成功后,再注释掉
#skip-grant-tables
#表名全部为小写,避免出现大小写敏感
lower_case_table_names=1
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8
#让mysql数据库支持 事务设置 引擎为:INNODB
#default-storage-engine=INNODB
#代码结束
第三步,配置mysql的系统环境变量,方便后面的命令运行。
MYSQL_HOME
C:\database\mysql-master;C:\database\mysql-slave
在path后面追加:
%MYSQL_HOME%\bin
不配置环境变量,mysql的命令无法识别,最终导致无法运行。
第四步,安装主从库的服务;在运行下,以管理员的身份进入到mysql-master下的bin文件夹,执行命令:
#主库服务安装命令
mysqld --install mysqlmaster --defaults-file=“c:\database\mysql-master\my.ini”
# 出现 Service successfully installed. 时,代表安装成功;
#初始化data文件夹下的数据库系统文件
mysqld --initialize
#从库服务安装命令
mysqld --install mysqlslave --defaults-file=“c:\database\mysql-slave\my.ini”
#从库的data,从主库中把data下的文件夹都拷贝过来,删除auto.cnf 文件即可;
#可使用此命令查看主从库的server_id,防止主从库的server_id冲突,导致后面的配置失败;
show variables like 'server_id';
如果安装错了,用 mysqld --remove mysqlmaster 命令移除;安装成功后进行启动服务;
#启动mysql
net start mysqlmaster
net start mysqlslave
#停止mysql
net stop mysqlmaster
net stop mysqlslave
第五步,主从库重新设置密码
把my.ini中的skip-grant-tables注解去掉,然后重启mysql服务,设置完密码后,再次将注解加上,再一次的重启,使密码生效。
进入到bin文件夹,mysql -u root -p 命令进入mysql的命令行,然后输入密码123456
#使用系统数据库,修改用户密码
use mysql
#修改密码的语句
update user set authentication_string=PASSWORD('123456')where user='root';
#执行刷新,刷新后,密码才能生效;
flush privileges;
第六步,配置主从库
第一,主库的 [mysqld] 下增加配置:
#主库配置,服务器标志号,注意在配置文件中不能出现多个这样的标识,如果出现多个的话mysql以第一个为准,一组主从中此标识号不能重复。
server_id = 1
#开启bin-log
log-bin=mysql-bin
#不需要备份,需要忽略的数据库
binlog-ignore-db=mysql
binlog-ignore-db=performance_schema
binlog-ignore-db=sys
第二,从库配置 [mysqld] 下增加配置:
#从库配置
server_id=2
#开启bin-log
log-bin=mysql-bin
第三,重启主从库,这一步也很重要,可以让配置中的server_id生效。
第七,主从库授权,关键的一步
第一,主库授权,进入到主库的操作命令下,执行
grant replication slave on *.* to 'test'@'127.0.0.1' identified by '123456';
flush privileges; #授权后需要刷新后,才能生效;
#查看主库授权状态
show master status;
第二步,从库授权,进入到从库的操作命令下,执行
change master to master_host='127.0.0.1',master_user='test',master_password='123456',master_log_file='mysql-bin.000003',master_log_pos=154;
#启动主从拷贝
start slave;
#查看拷贝状态
show slave status;
#清除授权,授权信息也被清除掉
reset slave all;
#查看状态
show slave status \G
当查看从库的slave状态,下面两个状态都是yes时,代表主从库配置成功了。
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
最后,加点补充,为了防止从库被篡改,建立一个新的只读账户,对外只开放这个只读账号,禁止对从库数据库的操作,只能读,不能写。这样主从库的同步又多了一个保障。
GRANT SElECT ON *.* TO 'root_readonly'@'%' IDENTIFIED BY "123456";
#执行刷新,刷新后;
flush privileges;
以上的操作完成后,最后再做个测试,确保主从库同步,从库不可手动修改。
总结
对于类似的配置,这个配置只能算中等的配置,要说复杂,还不算太复杂。多做些练习来加深印象比较好,只配置过一次二次肯定不可以,怎么样也需要配置个五六七八次,多配置几次,多犯几次错误,多思考几次为什么会这样,走心一点,关键时刻才能不掉链子。
网友评论