顯示具有 mysql 標籤的文章。 顯示所有文章
顯示具有 mysql 標籤的文章。 顯示所有文章

2022年12月27日 星期二

docker mysql 主從複製

 1.主服務器

docker run -p 3307:3306 --name mysql-master \

-v /mydata/mysql-master/log:/var/log/mysql \

-v /mydata/mysql-master/data:/var/lib/mysql \

-v /mydata/mysql-master/conf:/etc/mysql \

-e MYSQL_ROOT_PASSWORD=root \

-d mysql:5.7

2.在/mydata/mysql-master/conf 新建my.cnf

cd /mydata/mysql-master/conf 

sudo vi 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

3.修改後重啟master

docker restart mysql-master

4.進入mysql-master 容器

docker exec -it mysql-master /bin/bash

mysql -uroot -proot

show databases;

5.mysql-master容器內建數據同步用戶

create user 'slave'@'%' identified by '12345678';

grant replication slave,replication client on *.* to 'slave'@'%';

6.新建從服務器

docker run -p 3308:3306 --name mysql-slave \

-v /mydatamysql-slave/log:/var/log/mysql \

-v /mydata/mysql-slave/data:/var/lib/mysql \

-v /mydata/mysql-slave/conf:/etc/mysql \

-e MYSQL_ROOT_PASSWORD=root \

-d mysql:5.7

7.在/mydata/mysql-slave/conf 新建my.cnf

cd /mydata/mysql-slave/conf 

sudo vi my.cnf

[mysqld]

##設置server_id,同一網域中需要唯一

server_id=102

##指定不需要同步的數據名稱

binlog-ignore-db=mysql

##開啟二進制日誌功能,以備slave作為其他數據實例的master時使用

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

8.修改後重啟slave

docker restart mysql-slave

9.在主數據庫中查看主從同步狀態

在主服務器的mysql中,show master status;

10.進入mysql-slave 容器

docker exec -it mysql-slave /bin/bash

mysql -uroot -proot

show databases;

11.在從服務器數據庫中配置主從複製-->在mysql中

change master to master_host='宿主機IP',master_user='slave',master_password='12345678',master_port=3307,master_log_file='mall-mysql-bin.000001',master_log_pos=617,master_count_retry=30;

12.在從服務器數據庫中查看主從同步狀態

show slave status \G;

看slave_io_running:no   slave_sql_running:no -->表示還沒開始同步

13.在從服務器數據庫中開啟主從同步

start slave;

14.查看從服務器數據庫狀態發現已經同步

show slave status \G;

看slave_io_running:yes   slave_sql_running:yes -->表示已經開始同步

15.主從複製測試

在主服務器數據庫

create database db01;

use db01;

create table t1 (id int,name varchar(20));

insert into t1 values(1,'z3');

select * from t1;

在從服務器數據庫

use db01;

select * from t1;

看資料是否有進來





2022年12月22日 星期四

Docker 建置 mysql

 1.docker run -d -p 3306:3306 --privileged=true    \

    -v /abc/mysql/log:/var/log/mysql    \

    -v /abc/mysql/data:/var/lib/mysql    \

    -v /abc/mysql/conf:/etc/mysql/conf.d    \

    -e MYSQL_ROOT_PASSWORD=12345678    \

    --name=mysql    \

    mysql:5.7

2.新建my.cnf

cd /abc/mysql/conf

vi my.cnf

加入

[client]

default_character_set=utf8

[mysqld]

collation_server=utf8_general_ci

character_set_server=utf8

3.重新啟動mysql容器,再進入查看字符編碼

docker restart mysql

docker exec -it mysql bash

mysql -uroot -p

SHOW VARIABLES WHERE Variable_name LIKE 'character_set_%' OR Variable_name LIKE 'collation%';

4.測試,看中文是否為亂碼

show databases;

create database db01;

use db01;

create table t1(id int,name varchar(40));

insert into t1 values(1,'u3');

insert into t1 values(2,'王五');

select * from t1;

--------------------------------------------------------------

安裝mysql 8

docker run --name 容器名稱 -d  mysql --net=網路名稱 -p xxxx:xxxx --privileged=true  \

-e MYSQL_ROOT_PASSWORD=MYSQL的管理員密碼 \

-e MYSQL_DATABASE=資料庫網域名稱 \

-e MYSQL_USER=MYSQL的使用者名稱 \

-e MYSQL_PASSWORD=MYSQL的使用者密碼 \

--character-set-server=字元編碼 \

--collationserver=字符對照表 \

--default-authentication-plugin=驗證方式

--------------------------------------------------------

例如

docker network create netmysql

docker run --name mymysql -d --net=netmysql -p 3306:3306 --privileged=true \

-e MYSQL_ROOT_PASSWORD='12345678' \

-e MYSQL_DATABASE=sctmysql \

-e MYSQL_USER=sct \

-e MYSQL_PASSWORD='sct123456' \

mysql \

--character-set-server=utf8mb4 \

--collation-server=utf8mb4_unicode_ci \

--default-authentication-plugin=mysql_native_password


=============================================

docker run -d -p 3306:3306 --privileged=true    \

-v /abc/mysql/log:/var/log/mysql    \

-v /abc/mysql/data:/var/lib/mysql    \

-v /abc/mysql/conf:/etc/mysql/conf.d    \

-e MYSQL_ROOT_PASSWORD=12345678    \

-e MYSQL_DATABASE=sctmysql \

-e MYSQL_USER=sct \

-e MYSQL_PASSWORD='sct123456' \

--name=mysql \

mysql


vi my.cnf

加入

[client]

default-character-set = utf8mb4

[mysql]

default-character-set = utf8mb4

[mysqld]

collation-server=utf8mb4_unicode_ci

character-set-server = utf8mb4

character-set-client-handshake = FALSE




2022年7月15日 星期五

mysql 授權root遠端存取

Mysql 5.7版為

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '!QAZ@WSX' WITH GRANT OPTION;

FLUSH PRIVILEGES;

exit


Mysql 8版為

ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '!QAZ@WSX';

FLUSH PRIVILEGES;

exit


CREATE USER 'root'@'%' IDENTIFIED BY 'PASSWORD' WITH GRANT OPTION;

GRANT ALL PRIVILEGES ON *.* to 'root'@'%';

FLUSH PRIVILEGES;

exit