用docker配置mysql主从集群同步

  • Post author:
  • Post category:mysql





1.安装docker


详见https://blog.csdn.net/qq_33320785/article/details/81189061




安装步骤



sudo yum install -y yum-utils device-mapper-persistent-data lvm2


sudo yum-config-manager –add-repo https://download.docker.com/linux/centos/docker-ce.repo


sudo yum makecache fast


sudo yum install docker-ce


注意:安装带版本号的稳定版的docker-ce,不要安装不稳定的最新版本。


启动docker服务:


service docker start


systemctl


注意:


CentOS 7以上版本




2.docker部署主从mysql


(1)Docker上搜索mysql :



docker search mysql


(2)



pull mysql到本地,命令如下:docker pull mysql:5.6



注意:这边的


mysql版本是5.6的。最新版本是8.0的。该方法对8.0的无效

(3)



.在主机下面新增master.cnf和slave.cnf配置文件





master.cnf文件:



[mysqld]


pid-file = /var/run/mysqld/mysqld.pid


socket = /var/run/mysqld/mysqld.sock


datadir = /var/lib/mysql


symbolic-links=0


character-set-server = utf8


#skip-networking


innodb_print_all_deadlocks = 1


max_connections = 2000


max_connect_errors = 6000


open_files_limit = 65535


table_open_cache = 128


max_allowed_packet = 4M


binlog_cache_size = 1M


max_heap_table_size = 8M


tmp_table_size = 16M


read_buffer_size = 2M


read_rnd_buffer_size = 8M


sort_buffer_size = 8M


join_buffer_size = 28M


key_buffer_size = 4M


thread_cache_size = 8


query_cache_type = 1


query_cache_size = 8M


query_cache_limit = 2M


ft_min_word_len = 4




log-bin = mysql-bin





server-id = 1



binlog_format = mixed


performance_schema = 0


explicit_defaults_for_timestamp


#lower_case_table_names = 1


interactive_timeout = 28800


wait_timeout = 28800


# Recommended in standard MySQL setup


sql_mode=NO_ENGINE_SUBSTITUTION,NO_AUTO_CREATE_USER,STRICT_TRANS_TABLES


[mysqldump]


quick


max_allowed_packet = 16M


[myisamchk]


key_buffer_size = 8M


sort_buffer_size = 8M


read_buffer = 4M


write_buffer = 4M




slave.cnf文件:



[mysqld]


pid-file = /var/run/mysqld/mysqld.pid


socket = /var/run/mysqld/mysqld.sock


datadir = /var/lib/mysql


symbolic-links=0


character-set-server = utf8


#skip-networking


innodb_print_all_deadlocks = 1


max_connections = 2000


max_connect_errors = 6000


open_files_limit = 65535


table_open_cache = 128


max_allowed_packet = 4M


binlog_cache_size = 1M


max_heap_table_size = 8M


tmp_table_size = 16M


read_buffer_size = 2M


read_rnd_buffer_size = 8M


sort_buffer_size = 8M


join_buffer_size = 28M


key_buffer_size = 4M


thread_cache_size = 8


query_cache_type = 1


query_cache_size = 8M


query_cache_limit = 2M


ft_min_word_len = 4




log-bin = mysql-bin





server-id = 2



binlog_format = mixed


performance_schema = 0


explicit_defaults_for_timestamp


#lower_case_table_names = 1


interactive_timeout = 28800


wait_timeout = 28800


# Recommended in standard MySQL setup


sql_mode=NO_ENGINE_SUBSTITUTION,NO_AUTO_CREATE_USER,STRICT_TRANS_TABLES


[mysqldump]


quick


max_allowed_packet = 16M


[myisamchk]


key_buffer_size = 8M


sort_buffer_size = 8M


read_buffer = 4M


write_buffer = 4M


(我加粗的那些是开启主从数据库的关键,重要参数解释如下:




lower_case_table_names




:忽略表名、列名等数据结构的大小写(注意:不是每行记录内容的大小写!)。




server-id=1: 表示此MySQL服务器是主服务器 。





log-bin




:开启二进制记录。这是为了主从复制而做的设置。本文使用RBR(Row-Based Replication)模式。




slow_query_log=1




:开启慢查询日志。如果某一条SQL执行的时间超过long_query_time设置的秒数,那么就记录下来。记录文件路径可以使用show variables;命令,在变量名是slow_query_log_file下查找到具体的日志文件路径。




long_query_time=1




:单位是秒。指如果某一条SQL语句执行时间超过1秒,就记录下来。必须开启慢查询日志了以后,此变量才能使用。




log_error




:开启错误日志。show variables like ‘log_error’; 就可以查询到日志文件的路径。mysql的docker官方镜像如果设置别的取值会导致容器无法正常启动。






(4)






运行容器





启动master容器:





docker run -p 3306:3306 –name master -v /






root






/master.cnf:/etc/mysql/conf.d/master.cnf -e MYSQL_ROOT_PASSWORD=






123456






-d mysql:5.6





启动slave容器:





docker run -p 3307:3306 –name slave -v /






root






/slave.cnf:/etc/mysql/conf.d/slave.cnf -e MYSQL_ROOT_PASSWORD=






123456






-d mysql:5.6



(参数解释如下:


-p 3306:3306:将容器的3306端口映射到主机的3306端口。


-v 将主机当前目录下的master.cnf挂载到容器的/etc/mysql/


conf.d/


master.cnf。




记住只能是在conf.d的文件下面才可以。



-e MYSQL_ROOT_PASSWORD=


123456


:初始化root用户的密码。



Docker ps 查看运行中的容器

Docker ps -a 查看所有容器




(5)






进入容器中,命令如下:





进入到slave容器中:docker exec -i -t 2b6bfad43a7c








/bin/bash





进入到master容器中:docker exec -i -t c5ace38e0185








/bin/bash





(6)进入master 的mysql





Mysql -uroot -p123456





查看master数据库状态,命令如下:show master status;





(如果出现这个表格就说明启动成功了,这边我们需要记录file字段的值,因为在slave中需要用这个值进行主从关联)





  1. 在master数据库中创建用户,命令如下:create user








    zijixie





  2. 在master数据库中给刚才创建的用户赋予一定权限,命令如下:





GRANT ALL PRIVILEGES ON *.* TO






zijixie






@’%’ IDENTIFIED BY






123456






; FLUSH PRIVILEGES;FLUSH PRIVILEGES;



(参数介绍:


1.FLUSH PRIVILEGES;这个命令必须填写,否则上面设置的用户权限失效。


2.ip地址是可以设置范围的。例如:GRANT REPLICATION


SLAVE O


N *.* TO





zijixie





@’


ip


%’ IDENTIFIED


123


;


3.操作的数据库也是可以指定的。


4.用户的权限也是可以设置的。具体的命令大家可以自己去学习,我这里就不多说了。


如果不设置用户权限的话,本地可以连接的上mysql服务器,局域网或者外网是连接不上,会显示连接被拒绝或者用户没有这个权限。除此之外权限还可以精确到某个数据库,连接者的IP地址区间,设置是某个数据的操作问题等等都可以进行设置。我这边设置


的是


zijixie


这个用户具备所有用户数据库的权限,所有的ip地址都可以通过Master这个用户来连


接主数据库。)

(7)



进入slave数据库中配置主从关系关联:



change master to


master_host=’


ip


‘,


//Master 服务器Ip地址,


master_port=3306,


//Master 端口号


master_user=’


zijixie


‘,


//Master 用户名


master_password=’


123456


‘,


//用户密码


master_log_file=’mysql-bin.00000


1


‘,


//Master服务器产生的日志要和Master服务器所配置的相互对应如下如所示的file对应


master_log_pos=0;


//要和Master服务器所配置的相互对应如下如所示的Position对应(经过测试发现如果是一样的只能同步一次,所以这里修正成0,0是可以每次都同步成功的)




(我这边用//是为了解释方便,数据库中操作的时候一定不要加上!!!)


(8)



在salve数据库中启动服务,命令如下:start slave;


(9)



在salve数据库中查看启动状态,命令如下:show slave status\G



(注意:看到几个yes之后就是成功啦)

最后就是利用navicat测试是否能够成功同步啦~

自己搭建过程中碰到的问题:

1.mysql 版本8.0不行

2.配置文件写歪了。导致docker启动服务的时候报错(docker 查看报错的命令 docker logs 容器号)查看mysql启动报错

  1. 配置主从权限的时候进错了服务器~啊哈哈哈哈报错了。

Fatal error: The slave I/O thread stops because master and slave have equal MySQL server ids; these ids must be different for replication to work (or the –replicate-same-server-id option must be used on slave but this does not always make sense;

很尴尬~大家仔细点~



版权声明:本文为qq_33320785原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。