打开docker,选择注册表,搜索mysql,然后选择你想要的版本进行下载。
mysql5.6映像下载地址:https://sn9.us/file/24309239-423308948,文件提取码:1234
首先进行从库容器的配置。
高级设置从库不需要设置自动重启。卷的话因为不看具体mysql文件就略过了,网络后面设置,主要设置的是端口和环境。
环境的话添加一个MYSQL_ROOT_PASSWORD
就行,它的值决定了数据库的登录密码。
点击应用后,会回到创建容器界面,点击下一步,再点击应用即可。
主库除了多设置一个链接,其它的和从库基本一致,链接的作用主要是让主库依赖于从库,想要启动主库就会先把从库启动。这会影响到ip分配的问题。这就是为什么先配置从库的原因。
至此,两个mysql服务端就配好了。
这一步至关重要,因为这将关系到容器独立ip的问题。首先点击docker的网络,点击新增,添加mysql专属网络。
子网填的是CIDR格式的网络地址,x.x.x.x/29,29表示它的子网掩码为255.255.255.248,可以使用8个ip地址,因网络地址、网关地址占去了前面两个ip,广播地址占去了最后一个ip,而整个网络只有两个容器,以上图为例,主库依赖于从库,从库会先启动得到第一个ip,得到的ip就是192.168.0.2,而主库后启动得到的ip是192.168.0.3。完成网络的创建后,选择默认网络bridge,点击管理,删除之前创建的两个容器。
接着选择新增的网络,点击管理添加刚才删除的两个容器。
先重新启动两个容器,点击详情。
进入详情后选择终端机,点击新增,然后选择新增的bash。
接着按顺序执行以下命令,安装工具。
apt-get update
apt-get install net-tools
apt-get install vim
安装vim的时候要注意,中间会有个选择,如何不选择的话会一直卡在那里。输入y就行,不分大小写。
这时候,就可以执行vim命令了,输入vim /etc/mysql/my.cnf
对my.cnf进行修改,我这里是为了查看的my.cnf,所以命令步骤不一样,但结果都是要打开my.cnf进行修改。
这时,在键盘上按下O
,进行文件的修改。
输入以下内容。
[mysqld]
## 同一局域网内注意要唯一
server-id=100
## 开启二进制日志功能,可以随便取(关键)
log-bin=mysql-bin
##忽略的数据库
replicate-ignore-db=mysql
replicate-ignore-db=information_schema
replicate-ignore-db=performance_schema
##三级同步时需要开启log-slave-updates,两级可忽略
log-slave-updates=on
##表示自增长字段从那个数开始,他的取值范围是1 .. 65535
auto-increment-offset=1
##表示自增长字段每次递增的量,其默认值是1,取值范围是1 .. 65535
auto-increment-increment=2
##在主主同步配置时,需要将两台服务器的auto_increment_increment增长量都配置为2,而要把auto_increment_offset分别配置为1和2.
##这样才可以避免两台服务器同时做更新时自增长字段的值之间发生冲突。
配置完成之后,需要重启mysql服务使配置生效。使用service mysql restart完成重启
编辑完成后按键盘的ESC键,输入:wq保存退出。然后会回到开始的界面,就此,主库的my.cnf已经配好了,配置完成后要执行service mysql restart;
使配置生效。
这时把终端机关了,打开从库容器,按照主库的配置的执行步骤对从库容器进行配置,从详情开始,一直到修改my.cnf。唯一不同的就是my.cnf的修改内容。同样配置完成后也要重启服务,重启服务命令service mysql restart;
。重启服务会导致容器中止重启,没什么影响。
从库的my.cnf配置如下:
[mysqld]
server-id=101
log-bin=mysql-bin
replicate-ignore-db=mysql
replicate-ignore-db=information_schema
replicate-ignore-db=performance_schema
log-slave-updates=on
auto-increment-offset=2
auto-increment-increment=2
两个mysql的my.cnf都好后,开始对mysql进行配置。首先打开主库,从终端机进入mysql命令行,输入mysql –u root –p
进入mysql。
此时,执行 show master status;
File和Position字段的值后面将会用到,在后面的操作完成之前,需要保正主库不能做任何操作,否则将会引起File和Position字段的值变化。然后,关闭主库终端机,进入从库mysql终端机,对从库mysql进行配置。
在mysql中执行change master to master_host='192.168.0.3',master_user='root',master_password='root',master_port=3306, master_log_file='mysql-bin.000001', master_log_pos= 120
,其中,master_host设置的是主库分到的ip,master_user是mysql用户名,master_password是mysql用户登录密码,正常情况下最好新建一个用户,我比较懒,反正是自己用,影响不大,就不设置了,master_port是主库的容器端口号,master_log_file是前面在主库用show master status;
查到的File字段值,master_log_pos是Position字段值。
接着,在从库中的mysql终端执行show slave status \G;
用于查看主从同步状态。
一般,Slave_IO_Running 和 Slave_SQL_Running 都是No,因为没有开启主从复制过程,只要有一个不是Yes,数据库就同步不了。使用start slave;
开启主从复制过程,然后再次查询主从同步状态show slave status \G;
。
接下来是配置主库,同样先在从库执行show master status;
查看并记住File和Position字段。
进入主库的mysql终端,执行
change master to master_host='192.168.0.2',master_user='root',master_password='root',master_port=3306,master_log_file='mysql-bin.000001', master_log_pos= 120
只不过master_host变成从库的容器ip,其它的master的内容都变成从库的配置。
完成后开启主从复制过程,start slave;
到此双主数据库同步就配置好了。
前提条件是必须已经安装net-tools工具,否则用不了ifconfig
命令,安装net-tools工具的命令为:apt-get install net-tools