#锁定主数据库
flush tables with read lock
#验证结果
INSERT INTO `kettle`.`user_copy` (`id`, `name`, `telphone`) VALUES ("4", "4", "4");
# [SQL]INSERT INTO `kettle`.`user_copy` (`id`, `name`, `telphone`) VALUES ("4", "4", "4");
# [Err] 1223 - Can"t execute the query because you have a conflicting read lock
#解锁主数据库
#切换回主数据库的终端,进行表解锁操作。
unlock tables;
主数据库配置
[mysqld]
# 设置3306端口
port=3306
# innodb_force_recovery = 0
# 设置mysql的安装目录
basedir=D:\mysql\master
# 设置mysql数据库的数据的存放目录
datadir=D:\mysql\master\data
# 允许最大连接数
max_connections=1000
# 允许连接失败的次数。
max_connect_errors=10
# 服务端使用的字符集默认为utf8mb4
character-set-server=utf8mb4
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# 默认使用“mysql_native_password”插件认证
#mysql_native_password
#default_authentication_plugin=mysql_native_password
#满查询日志
slow_query_log = ON
slow_query_log_file = D:\mysql\master\data\slow.log
#超过10秒记录日志
long_query_time = 10
# binlog 配置
log-bin = D:\mysql\master\binlog\mysql-bin.log
expire-logs-days = 30
max-binlog-size = 500M
server-id = 1
#设置需要同步的数据库
binlog-do-db=kettle
#屏蔽系统库同步
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
[WindowsMySQLServer]
Server=D:\mysql\master\bin\mysqld.exe
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8mb4
[client]
# 设置mysql客户端连接服务端时默认使用的端口
port=3306
default-character-set=utf8mb4
主要添加的配置为
#设置需要同步的数据库
binlog-do-db=kettle
#屏蔽系统库同步
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
从数据库 配置
[mysqld]
# 设置3307端口
port=3307
# innodb_force_recovery = 0
# 设置mysql的安装目录
basedir=D:\mysql\slave
# 设置mysql数据库的数据的存放目录
datadir=D:\mysql\slave\data
# 允许最大连接数
max_connections=1000
# 允许连接失败的次数。
max_connect_errors=10
# 服务端使用的字符集默认为utf8mb4
character-set-server=utf8mb4
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# 默认使用“mysql_native_password”插件认证
#mysql_native_password
#default_authentication_plugin=mysql_native_password
#满查询日志
slow_query_log = ON
slow_query_log_file = D:\mysql\slave\data\slow.log
#超过10秒记录日志
long_query_time = 10
# binlog 配置
log-bin = D:\mysql\slave\binlog\mysql-bin.log
expire-logs-days = 30
max-binlog-size = 500M
server-id = 2
#设置需要同步的数据库
replicate_wild_do_table=kettle.%
#屏蔽系统库同步
replicate_wild_ignore_table=mysql.%
replicate_wild_ignore_table=information_schema.%
replicate_wild_ignore_table=performance_schema.%
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8mb4
[client]
# 设置mysql客户端连接服务端时默认使用的端口
port=3307
default-character-set=utf8mb4
主要添加的配置为
#设置需要同步的数据库
replicate_wild_do_table=kettle.%
#屏蔽系统库同步
replicate_wild_ignore_table=mysql.%
replicate_wild_ignore_table=information_schema.%
replicate_wild_ignore_table=performance_schema.%
主数据操作
use mysql
GRANT REPLICATION SLAVE ON *.* TO "db_sync"@"%" IDENTIFIED BY "db_sync";
FLUSH PRIVILEGES;
show master status
通过 show master status 查询 file 和 potition 并记录
从数据库操作
STOP SLAVE
CHANGE MASTER TO master_host = "localhost",master_user = "db_sync",master_password = "db_sync",master_log_file = "mysql-bin.000003",master_log_pos = 154
START SLAVE
show slave status
通过 show slave status 命令查看 同步状态
slave-io-running 和 slave-sql-running 都为 yes 才表示正常
另外特别注意,my.ini 文件的 server-id 不能相同 ,如果不小心设置了相同值,导致无法同步,可以先停服务,然后将数据库安装目录 data 目录下的
auto.cnf 文件删除,重启数据库解决,( 建议直接删除掉,重启服务后将会重新生成 ) ,因为里面的 server-uuid 通过 server-id 生成的。
#注意 如果之前此备库已有主库指向 需要先执行以下命令清空
STOP SLAVE IO_THREAD FOR CHANNEL "";
reset slave all;