Docker启动
在使用docker做自己数据库时,Docker启动时候根据业务需求传递以下参数:
1. 系统时间设置为亚洲上海
2. root密码启动时设置
3. 数据文件映射到当前目的data文件夹
4. 系统日志文件映射到当前目的data文件夹
5. 数据库的配置文件,使用当前目录下的 mysql_cnf 文件夹
1 2 3 4 | #删除正在运行的服务 docker rm -f ddd_mysql #启动服务 docker run --name ddd_mysql -p 3306:3306 -v $PWD/logs:/var/log -v $PWD/data:/var/lib/mysql -v $PWD/mysql_cnf:/etc/mysql -e TZ=Asia/Shanghai -e MYSQL_ROOT_PASSWORD=ddd_mysql_root -d mysql:5.7; |
主从docker mysql数据库:
配置文件拷贝到宿主机
1. mysql_cnf 文件夹 可以从 mysql:5.7的docker中拷贝出来
#docker cp 容器名:/etc/mysql ./mysql_cnf
2. 修改配置文件,支持主从同步,主从部署必要条件:
●主库开启binlog日志(设置log-bin参数)
●主从server-id不同
●从库服务器能连通主库
mysql.conf.d/mysqld.cnf
1 2 3 4 | [mysqld] #server_id ID号需要每个实例都唯一,比如主数据库设置为1,从数据库设置为2 server-id=1 log-bin=mysql-bin |
3. 配置主从数据库访问权限
1 2 3 4 5 6 7 8 9 | echo "init account"; ip_array=('172.18.0.%' 'your_ip1' 'your_ip2' 'your_ip3' 'master_ip') for(( i=0;i<${#ip_array[@]};i++)) do echo ${ip_array[i]}; mysql -h 127.0.0.1 -u root -pddd_mysql_root -e "GRANT ALL PRIVILEGES ON *.* TO 'root'@'${ip_array[i]}' IDENTIFIED BY 'ddd_mysql_root' WITH GRANT OPTION ;"; done; echo "rm root@%" mysql -h 127.0.0.1 -u root -pddd_mysql_root -e "drop user 'root'@'%';"; |
4. 启动主从数据库同步
A. 先导出主数据库数据,同时记录其日志文件和数据同步的位置值
B. 将主数据库数据导入到从数据库,配置主数据库信息,并开始同步。(注意:记得修改从数据库的配置文件中的server-id)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | #主服务器操作,先暂停业务访问 #刷新所有的表,同时给数据库加上一把锁,阻止对数据库进行任何的写操作 #flush tables with read lock; #show master status; #+------------------------+-----------+--------------+------------------+-------------------+ #| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | #+------------------------+-----------+--------------+------------------+-------------------+ #| mysql-bin.000003 | 153798086 | | | | #+------------------------+-----------+--------------+------------------+-------------------+ #1 row in set (0.00 sec) # 记录 File 和 Position的值 #导出数据库数据 #mysqldump -h 127.0.0.1 -u root -pddd_mysql_root --opt --default-character-set=utf8 --hex-blob --all-databases -R | sed -e 's/DEFINER[ ]*=[ ]*[^*]*\*/\*/' > /tmp/your`date +%Y%m%d`.sql; #数据库解锁,恢复对主数据库的操作 # unlock tables; #从服务器操作 #mysql -h 127.0.0.1 -u root -pddd_mysql_root < /tmp/your`date +%Y%m%d`.sql; #stop slave; #change master to master_host='master_ip', master_user='root', master_password='ddd_mysql_root', master_port=3306, master_log_file='mysql-bin.000003', master_log_pos= xxxx, master_connect_retry=30; #start slave; #show slave status \G; |