环境介绍
Master环境介绍
1)操作系统:windows_server_R2
2)Mysql版本:5.7.23
3)IP:10.0.1.53
Slave环境介绍:
1)操作系统:windows_server_R2
2)Mysql版本:5.7.23
3)IP:10.0.0.54
设置jdk环境变量和mysql环境变量
jdk环境变量配置共包括三项:JAVA_HOME、CLASSPATH 、PATH、MYSQL_HOME。配置过程如下:
右键点击“我的电脑”(有的系统叫“计算机”、“此电脑”等等),属性 —> 高级系统设置 —> 环境变量,在“系统变量”栏下进行以下操作
1.新建
变量名:JAVA_HOME
变量值:jdk安装路径,如:C:\Program Files\Java\jdk1.8.0_181
2.新建
变量名:CLASSPATH
变量值:.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar
3.编辑
变量名:Path
变量值:在原有的值后面加上:;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;%MYSQL_HOME%\bin
4.新建
变量名:MYSQL_HOME
变量值:mysql安装路径,如:C:\mysql-5.7.23-winx64\
Mysql解压版安装
找到mysql安装目录,创建my.ini,并且将my.ini移至bin目录下(my.ini文件内容如下)。
[Client]
port = 3306
[mysqld]
port = 3306
basedir=C:\mysql-5.7.23-winx64
datadir=C:\mysql-5.7.23-winx64\data
max_connections=200
character-set-server=utf8
default-storage-engine=INNODB
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
[mysql]
default-character-set=utf8
启动命令行,将目录切换到mysql安装目录的bin目录下。在命令行执行命令:mysqld --initialize --user=mysql --console,结果如下图所示
记住这个 临时密码
接下来在控制台以命令行输入: mysqld --install,进行安装服务操作。
安装成功后,使用net start mysql或去服务中找到MYSQL的服务,进行启动。
如果发生错误:
输入命令行mysql -uroot -p,利用之前的临时密码输入即可登录数据库
SET PASSWORD = PASSWORD('123456');
update mysql.user set Host='%' where HOST='localhost' and User='root';
flush privileges;
前提条件是主从端mysql的数据是一模一样的起始数据库内容(表、字段、内部值都必须一样!)
Master配置
1)my.ini配置
[Client]
port = 3306
[mysqld]
port = 3306
basedir=C:\mysql-5.7.23-winx64\
datadir=C:\mysql-5.7.23-winx64\data
max_connections=200
character-set-server=utf8
default-storage-engine=INNODB
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
## replication
server_id=53
binlog-ignore-db=mysql
log-bin=master-mysql-bin
binlog_cache_size=1M
binlog_format=mixed
expire_logs_days=30
[mysql]
default-character-set=utf8
重启mysql
net stop mysql
net start mysql
在主服务器上建立帐户并授权slave
mysql -u root -p
mysql> GRANT REPLICATION SLAVE ON *.* to 'mysqlsync'@'%' identified by '123456';
mysql> FLUSH TABLES WITH READ LOCK;
Query OK, 0 rows affected (0.01 sec)
##把数据表先锁住,不让Position 变化!
mysql> show master status;
+-------------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-------------------------+----------+--------------+------------------+-------------------+
| master-mysql-bin.000001 | 434 | | mysql | |
+-------------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
Slave配置
1)my.ini配置
[mysqld]
port = 3306
basedir=C:\mysql-5.7.23-winx64
datadir=C:\mysql-5.7.23-winx64\data
max_connections=200
character-set-server=utf8
default-storage-engine=INNODB
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
server_id=53
binlog-ignore-db=mysql
log-bin=mysql-slave-bin
binlog_cache_size = 1M
binlog_format=mixed ##mixed是开启混合同步模式
expire_logs_days=30
relay_log=mysql-relay-bin
log_slave_updates=1
read_only=1
[mysql]
default-character-set=utf8
2)重启mysql
net stop mysql
net start mysql
配置从服务器Slave:
mysql -uroot -p
change master to
master_host='10.0.1.53',
master_user='mysqlsync',
master_password='123456',
master_port=3306,
master_log_file='master-mysql-bin.000001',
master_log_pos=434,
master_connect_retry=30;
//注意不要断开,“434”无单引号,master_host的地址一定不能写错!
mysql> start slave; #启动从服务器复制功能
Query OK, 0 rows affected (0.00 sec)
回到Master端,解锁数据表
mysql> unlock tables;
回到从服务器检查从服务器复制功能状态:
mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 10.0.1.53
Master_User: mysqlsync
Master_Port: 3306
Connect_Retry: 30
Master_Log_File: master-mysql-bin.000003
Read_Master_Log_Pos: 434
Relay_Log_File: mysql-relay-bin.000002
Relay_Log_Pos: 327
Relay_Master_Log_File: master-mysql-bin.000003
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: 434
Relay_Log_Space: 534
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: 51
Master_UUID: aaadc62e-eccc-11e9-b77a-000c29374cbe
Master_Info_File: C:\mysql-5.7.23-winx64\data\master.info
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State: Slave has read all relay log; waiting for more up
dates
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)
特别注意:Slave_IO及Slave_SQL进程必须正常运行,即YES状态,否则都是错误的状态。
如果出现
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
但是mysql主从依然不能同步数据时
#停止slave服务
mysql> stop slave;
#跳过一步错误,后面的数字可变,如果还不行可执行多次
mysql> set global sql_slave_skip_counter =1;
#开始slave服务
mysql> start slave;
#查看slave状态
mysql> show slave status\G