根据需要指定版本
docker image pull mysql:5.7.29
查看镜像
docker images
创建容器
docker run -d -p 3306:3306 -v /docker/mysql/conf/my.cnf:/etc/my.cnf -v /docker/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mymysql mysql:5.7.29 --character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci
run run 是运行一个容器 -d 表示后台运行 -p 表示容器内部端口和服务器端口映射关联 --privileged=true 设值MySQL 的root用户权限, 否则外部不能使用root用户登陆 -v /docker/mysql/conf/my.cnf:/etc/my.cnf 将服务器中的my.cnf配置映射到docker中的/docker/mysql/conf/my.cnf配置 -v /docker/mysql/data:/var/lib/mysql 同上,映射数据库的数据目录, 避免以后docker删除重新运行MySQL容器时数据丢失 -e MYSQL_ROOT_PASSWORD=123456 设置MySQL数据库root用户的密码 --name mysql 设值容器名称为mysql mysql:5.7 表示从docker镜像mysql:5.7中启动一个容器 --character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci 设值数据库默认编码
可能会出现端口冲突
docker: Error response from daemon: driver failed programming external connectivity on endpoint mymysql (bda637da1d921634c102c399af1e77658a0ef2f77a5200a630957de38d9ca59e): Error starting userland proxy: listen tcp4 0.0.0.0:3306: bind: address already in use.
查看端口
netstat -tanlp
杀死相关的进程
kill 886
名字冲突 更换一个容器的名字
docker: Error response from daemon: Conflict. The container name "/mymysql" is already in use by container "4336c6c06a85c7210fe75910be1060a2fa66a88ca2d9a34958d3f4f9e89eade3". You have to remove (or rename) that container to be able to reuse that name.
docker exec -it mymysql bash
mysql -uroot -p
使用命令查看root用户是否开启远程权限弄
use mysql;
select User,authentication_string,Host from user;
host显示%则代表开启了远程连接
如果是使用云服务记得要开器3306端口
查看
show variables like 'log_bin';
on表示开启,off标识没有开启
在我们刚才设置的挂载my.cnf文件中添加下面的内容。这里要记住重新启动这个mysql服务。
[mysqld] #binlog文件名 log-bin=mysql-bin #选择row模式 binlog_format=ROW #mysql实例id,不能和canal的serverId重复 server-id=1
设置同步用户canal
grant SELECT, REPLICATION SLAVE, REPLICATION CLIENT on *.* to 'canal'@'%' identified by "canal";
flush privileges;
这里演示的是最新版的
docker pull canal/canal-server
在本地创建存放配置文件的地址
mkdir canal touch canal.properties touch instance.properties
cp容器中的文件
docker cp canal:/home/admin/canal-server/conf/example/instance.properties /docker/canal/instance.properties
docker cp canal:/home/admin/canal-server/conf/canal.properties /docker/canal/canal.properties
创建容器
docker run --name canal -p 11111:11111 -d -v /docker/canal/instance.properties:/home/admin/canal-server/conf/example/instance.properties -v /docker/canal/canal.properties:/home/admin/canal-server/conf/canal.properties canal/canal-server
修改instance文件
# position info 修改Linux中的数据库地址 canal.instance.master.address=147.95.115.74:3306 # username/password 指定可访问用户名和密码 canal.instance.dbUsername=canal canal.instance.dbPassword=canal # table regex 数据同步的规则这里写的是所有的数据库所有的表 canal.instance.filter.regex=.*\\..*
匹配