Docker 安装 MySQL
1、 docker search mysql
2、docker pull mysql/mysql-serer
3、mkdir -p ~/mysql/data ~/mysql/log ~/mysql/conf
data目录将映射为mysql容器配置的数据文件存放路径
log目录将映射为mysql容器的日志目录
conf目录里的配置文件将映射为mysql容器的配置文件
4、docker run -d -p 3307:3306
--name mysql-master
--restart=always
--privileged=true
-v /var/docker/mysql-master/data:/var/lib/mysql
-v /var/docker/mysql-master/conf:/etc/mysql/conf.d
-v /var/docker/mysql-master/log:/var/log
-v /etc/localtime:/etc/localtime:ro 让容器的时钟与宿主机时钟同步,避免时区的问题,ro是read only的意思,就是只读 -e TZ=Asia/ShangHai
-e MYSQL_USER = "aaaa"
-e MYSQL_PASSWORD="xxxxxx"
-e MYSQL_ROOT_PASSWORD=password
mysql/mysql-server
--character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
-
-p 123456:3306:将容器的3306端口映射到主机的12356端口
-
-v /var/docker/mysql/conf:/etc/mysql:将主机当前目录下的conf/my.cnf挂载到容器的/etc/mysql/my.cnf
-
-v /var/docker/mysql/log:/var/log:将主机当前目录下的logs目录挂载到容器的/logs
-
-v /var/docker/mysql/data:/var/lib/mysql :将主机当前目录下的datadir目录挂载到容器的//var/lib/mysql
-
-e MYSQL_ROOT_PASSWORD=123456:初始化root用户的密码
-
在docker run中加入 --privileged=true 给容器加上特定权限 。否则会chown: changing ownership of ‘/var/lib/mysql/....‘: Permission denied (http://www.cnblogs.com/performancetest/p/5719420.html)
-
-d: 后台运行容器,并返回容器ID
在宿主机响应目录建立my.cnf配置文件设置mysql字符集为utf8支持中文
cd /var/docker/mysql/conf.d
vi my.cnf
[client]
default_character_set=utf8
[mysqld]
collation_server=utf8_general_ci
character_server_set=utf8
重启mysql
docker restart mysql
配置主从同步
在宿主机上建立 /var/docke/mysql-master/conf/my.cnf
[mysqld]
##设置server_id, 同一局域网中需要唯一
server_id=101
##指定不需要同步的数据库名称
binlog-ignore-db=mysql
##开启二进制日志功能
log-bin=mall-mysql-bin
##设置二进制日志使用内存大小
binlog_cache_size=1M
##设置使用的二进制日志格式(mixed, statement, row)
binlog_format=mixed
##二进制日志过期清理时间,默认值0, 表示不自动清理
expire_logs_days=7
##跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断
##如:1062错误是指一些逐渐重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062
docker restart mysql-master
docker exec -it mysql-masert /bin/bash
mysql -uroot -p
CREATE USER 'slave'@'%'IDENTIFIED BY '123456'
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
show master status;
建立从数据库
docker run -d -p 3308:3306
--name mysql-slave
--restart=always
--privileged=true
-v /var/docker/mysql-slave/data:/var/lib/mysql
-v /var/docker/mysql-slave/conf:/etc/mysql
-v /var/docker/mysql-slave/log:/var/log
-e MYSQL_USER = "aaaa"
-e MYSQL_PASSWORD="xxxxxx"
-e MYSQL_ROOT_PASSWORD=password
mysql/mysql-server
建立/var/docker/mysql-slave/conf/my.cnf
[mysqld]
##设置server_id, 同一局域网中需要唯一
server_id=102
##指定不需要同步的数据库名称
binlog-ignore-db=mysql
##开启二进制日志功能
log-bin=mall-mysql-slave1-bin
##设置二进制日志使用内存大小
binlog_cache_size=1M
##设置使用的二进制日志格式(mixed, statement, row)
binlog_format=mixed
##二进制日志过期清理时间,默认值0, 表示不自动清理
expire_logs_days=7
##跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断
##如:1062错误是指一些逐渐重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062
##relay_log配置中继日志
relay_log=mall-mysql-relay-bin
##log_slave_updates 表示slave将复制事件写进自己的二进制日志
log_slave_updates=1
##slave设置为制度(具有super权限的用户除外)
read_only=1
docker restart mysql-slave
change master to master_host='10.0.0.3',master_user='slave',master_password='123456',master_port=3307,master_log_file='mall_mysql-bin.000001',master_log_pos=710,master_connect_retry=30;
show slave status \G
#进入mysql的终端, 如果提示
客户端连接caching-sha2-password问题, 按如下修改
5、
docker exec -it container-name mysql -uroot -p123456
- use mysql; #使用mysql库
- ALTER USER 'root'@'localhost' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER; #修改加密规则
- ALTER USER 'root'@'%' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER;
- ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'NewPassword';
- ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'NewPassword';
- #更新密码(mysql_native_password模式)
- update user set host='%' where user = 'root'; #设置root在任意ip可以使用(支持远程连接)
- FLUSH PRIVILEGES; #刷新权限
- quit; #退出控制台
CREATE USER 'name'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
GRANT ALL PRIVILEGES ON * . * TO 'name'@'localhost';
6、 docker exec -it container-id bash //进入container 内命令行模式