在生产环境中,Mysql基本上都部署在Linux系统中(本文就不涉及Linux下的设置),但是一些小项目或者在没有Linux环境的情况下,我们大多数还是在Windows下安装和部署我们的Mysql数据库,博主是开发人员,很少接触到数据库的配置,大多数也是涉及sql开发相关的操作, 最近开发任务不多,研究一下数据库方面的配置。
(一)、主从库初始数据保持一致。
既然是主从配置,那就是有一台主库,一台从库。
我的两台电脑IP分别为:172.18.16.19(主),172.18.16.11(从),Mysql端口都是3306
在同步之前,我们需要保证2台DB的数据是一致的, 这个可以采用命令 mysqldump
E:\mysql-5.7.9-winx64\bin>mysqldump --host=172.18.16.19 -uroot -proyse7en --opt
profittool|mysql --host=172.18.16.11 -upt2017 -ppt2017 -C profittool
mysqldump: [Warning] Using a password on the command line interface can be insec
ure.
mysqldump: Got error: 1045: Access denied for user 'root'@'172.18.16.11' (using
password: YES) when trying to connect
mysql: [Warning] Using a password on the command line interface can be insecure.
E:\mysql-5.7.9-winx64\bin>mysqldump --host=172.18.16.19 -upt2017 -ppt2017 --opt
profittool|mysql --host=172.18.16.11 -uroy_se7en -proyse7en -C profittool
mysqldump: [Warning] Using a password on the command line interface can be insec
ure.
mysql: [Warning] Using a password on the command line interface can be insecure.
E:\mysql-5.7.9-winx64\bin>
这样从库初始状态和主库就保持一致了。当然还有其他很多方法,目的只要保持主从数据初始一致即可。
(二)、主库配置
Mysql安装目录下找到My.ini文件
打开my.ini,增加如下配置
[mysqld]
server-id=1
log-bin=mysql-bin
binlog-do-db=profittool
其中
server-id=1 #当前mysql服务器的id
log-bin=mysql-bin #日志文件目录
binlog-do-db=profittool #同步的库名称
接下来为从库创建一个连接主库的账号 slave1
赋予图中的权限即可。
(三)、从库配置
同样在从库Mysql安装目录中找到my.ini
在后面增加配置
[mysqld]
port=3306
server-id=2
从库的配置需要特别说明一下,有很多的教程说是需要再从库中配置master-host 等一系列master-* 有关主库的配置,可是我只要加入master-*的配置,服务就启动不了,后面我 SHOW VARIABLES; 发现服务器根本没有master-host ,master-port等配置项,所以猜测可能是由于版本不同,mysql的一些变动。所以此处不需要加master-host这些配置。
下面执行 stop slave 操作,我擦,又报错了,好吧,百度一下,还是有很多人遇到同样的问题的。
mysql> stop slave;
ERROR 1794 (HY000): Slave is not configured or failed to initialize properly. Yo
u must at least set --server-id to enable either a master or a slave. Additional
error messages can be found in the MySQL error log.
如果没有报错的,可以直接跳过以下步骤.
以上错误的原因: 数据库打开这几张表的默认引擎为MyISAM,但是这几张表在建表时的引擎为INNODB 这个是复制别人的。
这几张表指的是 mysql 库中
innodb_index_stats,
innodb_tables_stats,
slave_master_info,
slave_relay_log_info,
slave_worker_info
以上5张表。首先,需要drop掉这些表
drop table if exists innodb_index_stats;
drop table if exists innodb_table_stats;
drop table if exists slave_master_info;
drop table if exists slave_relay_log_info;
drop table if exists slave_worker_info;
然后,将命令行目录切换到 mysql安装目录下的 \data\mysql 目录,使用dir *.ibd命令,查看当然的所有ibd文件。然后强制删除 del *.ibd
然后进入mysql命令行,切换到mysql数据库,执行命令
source E:\mysql-5.7.9-winx64\share\mysql_system_tables.sql
刚刚的表全部重建了。然后再执行如下命令
mysql> stop slave;
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> change master to master_host='172.18.16.19',master_port=3306,master_user=
'slave1',master_password='royse7en',master_log_file='mysql-bin.000001',master_lo
g_pos=154;
Query OK, 0 rows affected, 2 warnings (0.30 sec)
mysql> start slave;
Query OK, 0 rows affected (0.03 sec)
如上都没有报错的话,同步配置完成,接下来就到主库去改个东西试试,看看在从库有没有同步到
上面的master_log_file, master_log_pos 参数需要解释下,这个是主库的日志文件名和同步起始点。
在主库 执行 show master status; 即可查询到.
最后严重吐槽下, CSDN有点烂,编辑到一半无法保存文章,坑爹的,害我又重新敲了这么多字。