docker and mysql

/ 0评 / 1

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;

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据