您现在的位置是:自如初>MySqlMySql
详记windows下MySQL主从复制的实现
温新
2020-02-15 19:48:05
【MySql】
4031人已围观
简介出来混迟早要还的,无法保证安装一定不会出错的时间,建议该省的一定不能省。
序言
开始之前先废话一下。
我使用虚拟机来实验的原因:为了避免在操作过程中无意损坏了本地数据库。
为什么不使用Linux系统:
1)一直没有在windows下手动安装数据库,都是实用集成环境,想动手试一试;
2)这一次是在已有一个数据库的前提下再装一个,更想尝试一下;
3)说不定哪天就碰到了Windows服务器;
4)Linux系统的主从复制会实现的,到时候也详细记录下来;
5) 问题总结见文章末尾。
数据库推荐去mysql官方下载
一、环境说明
1.1、环境说明
虚拟机:VMware15.1
VMware虚拟系统:win10
【主库、从库】
MySQL版本:MySQL5.7.26
IP地址:127.0.0.1
主库端口:3306
从库端口:3307
1.2、情况说明
1)主库
使用phpstudy_v8集成环境中的MySql5.7.26作为主库。
说明:由于集成环境安装时间较早,没必要再去折腾重新安装2个。
2)从库
使用解压方式完完全全新手式安装。其中下载过程省去。
二、数据库安装
说明:两个数据库安装位置可以一样也可以不一样,全看个人。
2.1、主库安装
phpstudyv8集成环境。
mysql使用版本:MySql5.7.26
位置:C:\phpstudypro\Extensions\MySQL5.7.26
我之前安装好了,就不再重复安装。
2.2、从库安装(mysql5.7.26)
步骤一:官网下载mysql5.7.26 windows 64位版本(mysql-5.7.26-winx64.zip)
步骤二:移动至任意盘,解压并重命名为有语意的名称。
如:我放在了C盘根目录,名称为mysql-slave
位置:C:\mysql-slave
步骤三:配置my.ini文件
1)mysql-slave根目录下创建my.ini文件并进行配置:
C:\mysql-slave\my.ini
2)配置my.ini
[mysql] # 设置mysql客户端默认字符集 default-character-set=utf8mb4 [mysqld] #设置3306端口 port = 3307 # 设置mysql的安装目录 basedir=C:\mysql-slave # 设置mysql数据库的数据的存放目录 datadir=C:\mysql-slave/data3307 # 允许最大连接数 max_connections=200 # 服务端使用的字符集默认为8比特编码的latin1字符集 character-set-server=utf8mb4 # 创建新表时将使用的默认存储引擎 default-storage-engine=INNODB
PS:此处是配置从库,端口很重要,设置为3307!3307!3307!
步骤四:安装mysql
1) 以管理员身份打开CMD窗口
PS:不使用管理员身份打开是无法安装的!
2)执行安装命令
C:\mysql-slave\bin>C:\mysql-slave\bin\mysqld.exe install my3307 --defaults-file="C:\mysql-slave\my.ini"
PS:出现Service successfully installed则安装成功。若没有看到这个成功的提示(包括执行命令后没有任何回应)都是安装失败。安装失败,就去检查my.ini配置文件,看配置文件是否出错(9成是my.ini配置问题)。
3)初始化mysql
C:\mysql-slave\bin>C:\mysql-slave\bin\mysqld --initialize --console #初始化回应,并返回初始密码 2020-02-15T05:50:01.220199Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details). 2020-02-15T05:50:01.356151Z 0 [Warning] InnoDB: New log files created, LSN=45790 2020-02-15T05:50:01.386174Z 0 [Warning] InnoDB: Creating foreign key constraint system tables. 2020-02-15T05:50:01.454403Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: 01b4e123-4fb7-11ea-b9eb-000c292c8803. 2020-02-15T05:50:01.456685Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened. 2020-02-15T05:50:01.462937Z 1 [Note] A temporary password is generated for root@localhost: K+<_jG4SK:Fo
PS:--console显示情况。可以看到我这里出现了好几个Warining,这不影响安装,继续往下走。
4)查看注册表中mysql路经是否正确(可省略)
\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\my3307中的ImagePath 值: C:\mysql-slave\bin\mysqld.exe --defaults-file=C:\mysql-slave\my.ini my3307
5)启动mysql
net start my3307
6)登录mysql
C:\mysql-slave\bin>C:\mysql-slave\bin\mysql -uroot -P3307 -p
PS:密码是 第 3) 小步中的 root@localhost: K+<_jG4SK:Fo
7)修改root密码
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456'; # 刷新权限 flush privileges;
PS:生产环境中一定不要使用123456作为密码!
至此,mysql5.7.26安装完成。
三、主从配置
3.1、主库配置
1)主库配置my.ini
在[mysqld]下增加如下配置
# 服务器标识ID server-id=1 #二进制日志文件格式 log-bin=mysql-bin #binlog日志格式 binlog_format=mixed
2)重启mysql
由于是phpstudy集成环境,点击重启按钮即可。
3.2、从库配置
1)从库配置my.ini
在[mysqld]在增加如下配置
server-id=2 log-bin=mysql-bin # 从库二进制日志 relay-log=mysql-relay binlog_format=mixed
2)重启my3307
net stop my3307 net start my3307
PS:主库、从库中的server-id要有一定的含义,不要稀里糊涂的取1,2,3,4之类的。
PS:到这里关于主从配置中my.ini的配置就已经完成了。
3.2、授权操作
1)主库授权 步骤一:查看主库是否具备充当master的条件
show master status; +------------------+----------+--------------+------------------+-------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +------------------+----------+--------------+------------------+-------------------+ | mysql-bin.000002 | 154 | | | | +------------------+----------+--------------+------------------+-------------------+ 1 row in set (0.00 sec)
步骤二:创建授权用户(从库连接主库时用)
grant replication slave on *.* to 'my3307'@'%' identified by '123456'; flush privileges;
PS:主库操作完成
2)从库授权
步骤一:使用主库分配的授权用户连接主库
change master to master_host='127.0.0.1', master_user='my3307', master_password='123456', master_log_file='mysql-bin.000002', master_log_pos=154;
PS:注意:masterlogfile配置一定要与主库中的 show master status时的file一致,masterlogposg与position中显示的位置标识一致
步骤二:查看从库连接状态(是否成功状态信息)
show slave status
PS:由于信息太长,放到了步骤三后面
步骤三:启动slave
start slave;
3)验证主从复制 主库登录mysql,创建ziruchu表, 从库登录mysql,查看ziruchu表是否被复制了(到了这里,一般都是成功的)。
至此,一些逐安装、配置下来,若无报错,则说明主从配置已经成功。
步骤二状态详细信息
mysql> show slave status \G *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 127.0.0.1 Master_User: my3307 Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000002 Read_Master_Log_Pos: 591 Relay_Log_File: mysql-relay.000002 Relay_Log_Pos: 320 Relay_Master_Log_File: mysql-bin.000002 Slave_IO_Running: Yes Slave_SQL_Running: Yes Replicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 0 Last_Error: Skip_Counter: 0 Exec_Master_Log_Pos: 591 Relay_Log_Space: 523 Until_Condition: None Until_Log_File: Until_Log_Pos: 0 Master_SSL_Allowed: No Master_SSL_CA_File: Master_SSL_CA_Path: Master_SSL_Cert: Master_SSL_Cipher: Master_SSL_Key: Seconds_Behind_Master: 0 Master_SSL_Verify_Server_Cert: No Last_IO_Errno: 0 Last_IO_Error: Last_SQL_Errno: 0 Last_SQL_Error: Replicate_Ignore_Server_Ids: Master_Server_Id: 1 Master_UUID: ae0a8ec4-6fc1-11e9-821a-4ccc6a4d7344 Master_Info_File: C:\mysql-slave\data3307\master.info SQL_Delay: 0 SQL_Remaining_Delay: NULL Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates Master_Retry_Count: 86400 Master_Bind: Last_IO_Error_Timestamp: Last_SQL_Error_Timestamp: Master_SSL_Crl: Master_SSL_Crlpath: Retrieved_Gtid_Set: Executed_Gtid_Set: Auto_Position: 0 Replicate_Rewrite_DB: Channel_Name: Master_TLS_Version: 1 row in set (0.00 sec)
可以看到,SlaveIORunning,SlaveSQLRunning都是YES,说明配置成功。若配置不成功,LastIOErrno,LastIOError,LastSQLErrno,LastSQLError会有错误信息出现:
PS:到这里主从配置就完成了。第五节讲的是中间出错如何去解决。
四、扩展,只读用户(从库)
步骤一:创建只读用户
create user 'slave_onlyready'@'%' identified by '123456';
修改密码
update user setauthentication_string=PASSWORD(‘123456′) where user=’slave_onlyready’;
步骤二:授权只读
grant select on *.* to 'slave_onlyready'@'%' identified by '123456'; flush privileges;
五、启动授权报错
当从库start slave授权启动失败时,先停止slave(stop slave),然后清除授权(reset slave)
#停止slave stop slave; #清除授权.reset slave清除授权时保留授权信息 reset slave; #问题解决后再次开启授权 start slave;
PS:reset slave all也可以清除授权,但是此方式会清除授权信息。
六、总结
mysql主从复制的实现不难,但仍旧折腾了一些时间。主要的折腾是在安装mysql上。 第一次安装,与已经安装好的mysql端口冲突了。修改从库的配置文件,出现了许多错误。安装好后,启动my3307,出现已经启动...启动失败,没有报错,这让人预报,启动成功...启动失败,又不报错,找不到原因就重装吧,再次安装时加上console参数,查看信息,但是看到了不少的信息,然后修改my.ini配置文件,最后启动成功了。
PS:无法保证安装一定不会出错的时间,建议该省的一定不能省。
我是夕阳何处寻,期待和优秀的你一起同行!
夕阳何处寻
2020年2月15日
很赞哦!(41)
上一篇:PHP设计模式(九)之装饰模式
相关文章
文章评论
-
沉默的号角 2020年10月23日
兄弟可以,我按照你的博客搭建好了