1,
docker
run -d -p 3307:3306 -e
MYSQL_ROOT_PASSWORD=123456 --name mysql2? mysql
docker
run -d -p 3308:3306 -e
MYSQL_ROOT_PASSWORD=123456 --name mysql3? mysql
開兩個mysql,
還是進去這兩個容器設置下,讓我可以在mac上用navicat查看庫更方便一些。
ALTER USER
'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
刷新:
flush privileges;
2, docker run
的時候可以指定
docker network create test-network
但我們這里做了太多操作,不想重新run了, 我發現了規律。docker與宿主機互相通信時,可以用 這個ip,? 172.17.0.1
宿主機是172.17.0.1,? 然后docker ps 從下往上數,分別是
172.17.0.2
172.17.0.3
172.17.0.4
每run一個容器,ip末位 +1,? 知道這個規律就不用進容器看了。
這里有個建議是,操作前先把所有數據備份一下,以免丟失。
修改配置文件。
vim
/etc/mysql/my.cnf
在[mysqld]標簽下添加配置
vim
/etc/mysql/my.cnf
server-id =1
log-bin = mysql-bin
由于配置文件錯誤,mysql重啟失敗,失敗改不了配置文件,配置文件又在容器里,這里就兩難,? 有一種方法可以在docker容器外查找到配置文件。
find / -name my.cnf
vim
/var/lib/docker/overlay2/e7bd52c5f0d0d47e1ddd46211dc3ce81b05a7797d7568cd8edc1f20af5047192/diff/etc/mysql/my.cnf
只要沒刪除的容器,進去看下里面有好多東西, 就不用擔心改錯文件啟動不了了。
執行sql
CREATE USER
'slave'@'%' IDENTIFIED BY 'password';
GRANT REPLICATION
SLAVE ON *.* TO 'slave'@'%';
FLUSH PRIVILEGES;
查詢主服務器二進制文件信息。
show master
status;
mysql-bin.000002????????834????????????????????????
File為使用的日志文件名字,Position為使用的文件位置,這兩個參數須記下,配置從服務器時會用到。
主要參考的網址 http://www.lxweimin.com/p/cfd9bfd6e7f2
但他有兩處說的不清楚, 一個配置文件寫錯了。
log-bin = mysql-bin
還一個是數據庫沒有創建用戶,導致sql執行錯誤。
在mysql2?
配置文件里面添加
server-id =? 2
主要后面沒有分號。
change master to
master_host='172.17.0.2', master_user='root',
master_password='123456',master_log_file='mysql-bin.000002',
master_log_pos=834;
master_host:主服務器Ubuntu的ip地址
master_log_file: 前面查詢到的主服務器日志文件名
master_log_pos: 前面查詢到的主服務器日志文件位置
然后測試成功了,。
這里注意的是,你新建的用戶,就是mysql庫user表的用戶,我為了方便用了權限最高的root。
還有一點, 假如你寫了從庫, 比如唯一id為2的值, 就是從庫多了一條記錄,主庫當然不會一起變。但重要的是, 主庫如果這時在同步過來一條id=2的信息,由于與從庫id沖突了, 會同步錯誤。一條信息出錯,再同步信息都會出錯。
ok, 主從配置成功。