linux下数据库双向同步之mysql
环境:lamp 下搭建一个博客 然后实现同步 这里:以wordpress为例,进行实施 具体操作如下: 一、环境配置 1.自动获取ip地址,虚拟机设置为桥接 650) this.width=650;" style="border-bottom:0px;border-left:0px;border-top:0px;border-right:0px;" title="i
环境:lamp 下搭建一个博客 然后实现同步
这里:以wordpress为例,进行实施
具体操作如下:
一、环境配置
1.自动获取ip地址,虚拟机设置为桥接
2.[root@gjpslave ~]# yum install wget
#换成163的yum源:
cd /etc/yum.repos.d
mv CentOS-Base.repo CentOS-Base.repo.save
wget mirrors.163.com/.help/CentOS5-Base-163.repo
#wget mirrors.163.com/.help/CentOS6-Base-163.repo
sed -i 's/enabled=1/enabled=0/g' /etc/yum/pluginconf.d/fastestmirror.conf
cat /dev/null > /var/cache/yum/timedhosts.txt
yum clean all
yum makecache
3.yum -y install gcc* gcc-c++ rpm-build mysql* httpd* php* ppp openldap-devel lrzsz pam-devel wget net-snmp* ntp openssl* libgssapi* iptraf libtool-ltdl* libtool crontabs libpcap* flex byacc libpcap ncurses ncurses-devel automake autoconf libtool make traceroute wget scp openssh* setuptool mlocate pam.i686 openssl.i686 libgcrypt.i686 openssl098e.i686 glibc.i686 fping nload iftop iperf chkconfig unrar --skip-broken
yum -y update
4.系统安全
到dnspod.cn上为新的服务器指定域名
hostname xx 命名主机名
#### security ###
arp -a|grep $(/sbin/route -n|awk '$1=="0.0.0.0"{print $2}')|awk '{print $2 " " $4}'|sed 's#(##g'|sed 's#)##g' > /etc/ethers && arp -f
echo "SELINUX=disabled" > /etc/sysconfig/selinux
echo "SELINUXTYPE=targeted" >> /etc/sysconfig/selinux
setenforce 0
echo "HISTSIZE=5" >> /root/.bash_profile
chkconfig --level 2345 hplip off
chkconfig --level 2345 rpcidmapd off
chkconfig --level 2345 cups off
chkconfig --level 2345 portmap off
chkconfig --level 2345 yum-updatesd off
chkconfig --level 2345 iptables off
chkconfig --level 2345 sendmail off
killall cupsd portmap rpc.statd
service iptables stop
service yum-updatesd stop
service sendmail stop
echo "Port 2121" >> /etc/ssh/sshd_config
echo "ClientAliveInterval 9999" >> /etc/ssh/sshd_config
service sshd restart
二、博客搭建 wordpress
wget http://cn.wordpress.org/wordpress-3.9-zh_CN.tar.gz
tar zxvf http://cn.wordpress.org/wordpress-3.9-zh_CN.tar.gz
[root@gjpmaster tmp]# ls
hsperfdata_root wordpress wordpress-3.9-zh_CN.tar.gz yum.log yum_save_tx-2013-08
[root@gjpmaster tmp]# cp -a wordpress/* /var/www/html/
[root@gjpmaster ~]# useradd -d /var/www/html/ -s /sbin/nologin gjpmaster
useradd: warning: the home directory already exists.
Not copying any file from skel directory into it.
[root@gjpmaster ~]# passwd gjpmaster
Changing password for user gjpmaster.
New password: 123456
BAD PASSWORD: it is too simplistic/systematic
BAD PASSWORD: is too simple
Retype new password:
passwd: all authentication tokens updated successfully.
mysql> create database gjpmaster;
Query OK, 1 row affected (0.04 sec)
mysql> grant all on gjpmaster.* to gjpmaster@localhost identified by "gjpmaster321";
Query OK, 0 rows affected (0.00 sec)
[root@gjpmaster ~]# mysql -u gjpmaster -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.1.73 Source distribution
Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> quit
Bye
[root@gjpmaster html]# cp -a wp-config-sample.php wp-config.php
[root@gjpmaster html]# vi wp-config.php
[root@gjpmaster html]# chmod 777 -R wp-content/
[root@gjpmaster html]# vim /etc/httpd/conf/httpd.conf
Options -Indexes
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
[root@gjpmaster html]# service httpd restart
Stopping httpd: [ OK ]
Starting httpd: httpd: apr_sockaddr_info_get() failed for gjpmaster
httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName
[ OK ]
前台无法进入:
[root@gjpmaster html]# vim wp-includes/template-loader.php
三、ftp用来给博客上传下载东西
#安装
yum -y install vsftpd
#修改配置文件
vi /etc/vsftpd/vsftpd.conf
#system
local_umask=022
pasv_enable=YES
connect_from_port_20=YES
local_enable=YES
write_enable=YES
use_localtime=YES
listen=YES
listen_port=21
#security
guest_enable=NO
pam_service_name=vsftpd
tcp_wrappers=YES
userlist_enable=YES
userlist_deny=NO
userlist_file=/etc/vsftpd/user_list
chroot_local_user=YES
#chroot_list_enable=YES
#chroot_list_file=/etc/vsftpd.chroot_list
#log
xferlog_enable=YES
xferlog_std_format=YES
xferlog_file=/var/log/vsftpd.log
#anonymous
anonymous_enable=NO
#max_per_ip=13
#max_clients=50
#anon_world_readable_only=YES
#anon_other_write_enable=NO
#anon_mkdir_write_enable=NO
#anon_upload_enable=NO
no_anon_password=YES
#anon_max_rate=200000
#启动ftp
service vsftpd restart
#允许匿名登陆
修改配置文件 要有以下两条
no_anon_password=YES
anonymous_enable=YES
增加anonymous至/etc/vsftpd/user_list
#增加用户
两种情况 一种是有指定的目录分给指定的用户 如 将/var/ftp分给用户 wow 二是直接建立用户 目录就是/home/用户名
1.以将/var/ftp分配给wow为例
useradd -s /sbin/nologin -d /var/ftp wow // /sbin/nologin 是安全配置 意思是这个用户无法使用ssh登陆仅能使用ftp登陆 -d后面跟的是指定给此用户的目录
passwd wow //修改wow的用户名
echo wow >> /etc/vsftpd/user_list 这里一定要用>> 否则会清空里面的原来存放的用户名 只有这个列表user_list内的用户名可以登陆ftp上传文件 所以每添加一个用户名都要写入此文件
2.建立一个test用户 可以自己上传或下载文件
usreadd -s /sbin/nologin test
passwd test
echo test >> /etc/vsftpd/user_list
3.如果服务器上有多个ftp 在使用ftp协议下载时只能有一个采用匿名的方式 其它的都要带账号密码 比如说 ftp://123:123@sh02.lonlife.net/hehe.zip 还有另外一种方式就是给用户配置一个单独的域名用于下载 这时需要修改 /etc/httpd/conf/httpd.conf 增加如下 并重启http服务就好了
Options -Indexes
DocumentRoot "/old/home/bf2comcn" //ftp的目录
ServerName ftp.bf2.com.cn 绑定的域名
ErrorLog /var/log/httpd/bf2comcn_err.log
CustomLog /var/log/httpd/bf2comcn.log combined
上面是例子,操作如下:
从设备:
[root@gjpslave html]# yum install vsftpd -y
[root@gjpslave vsftpd]# ls
ftpusers user_list vsftpd.conf vsftpd_conf_migrate.sh
[root@gjpslave vsftpd]# mv vsftpd.conf vsftpd.conf.bak
[root@gjpslave vsftpd]# vim vsftpd.conf
-bash: vim: command not found
[root@gjpslave vsftpd]# vi vsftpd.conf
[root@gjpslave vsftpd]# service vsftpd restart
Shutting down vsftpd: [ OK ]
Starting vsftpd for vsftpd: [ OK ]
[root@gjpslave vsftpd]# vi vsftpd.conf
[root@gjpslave vsftpd]# vi /etc/vsftpd/user_list
[root@gjpslave vsftpd]# useradd -s /sbin/nologin -d /var/www/html/ gjpslave
useradd: warning: the home directory already exists.
Not copying any file from skel directory into it.
[root@gjpslave vsftpd]# passwd gjpslave
Changing password for user gjpslave.
New password: 123456
[root@gjpslave vsftpd]# echo gjpslave >>/etc/vsftpd/user_list
[root@gjpslave vsftpd]# chmod 755 -R /var/www/html/
[root@gjpslave vsftpd]# chown gjpslave:gjpslave -R /var/www/html
后面将gjpslave还是改为gjpmaster了
四、数据库同步(单向)
从主站导入数据库
[root@gjpmaster www]# /usr/bin/mysqldump -u root -p gjpmaster>/tmp/20140528.sql;
从站从主站下载:
[root@gjpslave vsftpd]# scp -rP 22 10.0.7.112:/tmp/20140528.sql /tmp/20140528.sql
root@10.0.7.112's password:
20140528.sql 100% 408KB 407.6KB/s 00:00
mysql> create database gjpmaster;
Query OK, 1 row affected (0.03 sec)
mysql> use gjpmaster;
Database changed
mysql> source /tmp/20140528.sql;
Query OK, 18 rows affected (0.00 sec)
Records: 18 Duplicates: 0 Warnings: 0
同步好的数据
grant all on gjpmaster.* to gjpslave@localhost identified by "gjpmaster321";
由于上面账号设置成gjpslave 出错了,改为gjpmaster 和主站的一样,ok
开始同步数据库:
grant replication slave on *.* to "gjpmaster"@"10.0.7.113" identified by "gjpmaster321";
[root@gjpmaster tmp]# vim /etc/my.cnf
[mysqld]
server-id=1
log-bin=mysql-bin
binlog-do-db=gjpmaster
binlog-ignore-db=mysql
[root@gjpmaster tmp]# service mysqld restart
Stopping mysqld: [ OK ]
Starting mysqld: [ OK ]
[root@gjpmaster tmp]# mysql -u root -p
mysql> show variables like 'server_id';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id | 1 |
+---------------+-------+
1 row in set (0.00 sec)
mysql> show master status;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 | 106 | gjpmaster | mysql |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
四、配置MySQL从服务器(192.168.21.129)的my.cnf文件
vi /etc/my.cnf #编辑配置文件,在[mysqld]部分添加下面内容
server-id=2 #设置服务器id,修改其值为2,表示为从数据库
log-bin=mysql-bin #启动MySQ二进制日志系统,注意:如果原来的配置文件中已经有这一行,就不用再添加了。
replicate-do-db=osyunweidb #需要同步的数据库名,如果有多个数据库,可重复此参数,每个数据库一行
replicate-ignore-db=mysql #不同步mysql系统数据库
read_only #设置数据库只读
:wq! #保存退出
service mysqld restart #重启MySQL
mysql -u root -p #进入MySQL控制台
show variables like 'server_id'; #查看server-id的值,必须为上面设置的2,否则请返回修改配置文件
mysql> show variables like 'server_id';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id | 2 |
+---------------+-------+
1 row in set (0.01 sec)
mysql> slave stop;
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> change master to master_host='10.0.7.112',master_user='gjpmaster', master_password='gjpmaster321',master_log_file='mysql-bin.000001',master_log_pos=106;
Query OK, 0 rows affected (0.05 sec)
change master to master_host='10.0.7.112',master_user='gjpmaster', master_password='gjpmaster321',master_log_file='mysql-bin.000002',master_log_pos=316;
mysql> slave start;
Query OK, 0 rows affected (0.01 sec)
mysql> SHOW SLAVE STATUS\G
mysql> SHOW SLAVE STATUS\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 10.0.7.112
Master_User: gjpmaster
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000001
Read_Master_Log_Pos: 106
Relay_Log_File: mysqld-relay-bin.000002
Relay_Log_Pos: 251
Relay_Master_Log_File: mysql-bin.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB: gjpmaster
Replicate_Ignore_DB: mysql
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 106
Relay_Log_Space: 407
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
1 row in set (0.00 sec)
测试:
主设备创建个表test
mysql> CREATE TABLE test ( id int not null primary key,name char(20) );
Query OK, 0 rows affected (0.07 sec)
CREATE TABLE lzw( id int not null primary key,name char(18) );
从设备
发表文章也是如此
wordpress迁移到其他服务器上 IP变动时候要修改以下信息.数据库里修改.
wp_options表:
siteurl 要改成新的IPurl
wp_posts表:
update wp_posts set post_content=replace(post_content,'192.168.100.151','10.0.0.23')
update wp_posts set guid=replace(guid,'192.168.100.151','10.0.0.23')
这里具体操作如下:
update wp_posts set post_content=replace(post_content,'10.0.7.112','10.0.7.113')
update wp_posts set guid=replace(guid,'10.0.7.112','10.0.7.113')
第一个域名是老域名 第二个是新的
UPDATE wp_options SET option_value=replace(option_value,'http://10.0.7.113', 'http://10.0.7.112') WHERE option_name='home' OR option_name='siteurl';
在这里,可安装phpmyadmin 对数据库进行管理
五、数据库的双向同步:
双向参考: http://www.linuxidc.com/Linux/2012-10/71593.htm
主站:
useradd backup passwd backup 123
mysql> grant file on *.* to backup@'10.0.7.113' identified by '123';
Query OK, 0 rows affected (0.00 sec)
mysql>flush privileges;
在slave上测试账户backup是否可以访问mster上的mysql:
#mysql -u backup -p -h 10.0.7.112(输入密码123,可以访问说明设置正确)
slave上也要建立账号 设密码
mysql> grant replication slave on *.* to "backup"@"10.0.7.113" identified by "123";
[root@gjpmaster ~]# cat /etc/my.cnf
[mysqld]
server-id=1
log-bin=mysql-bin
binlog-do-db=gjpmaster
binlog-ignore-db=mysql
max-binlog-size=104857600
master-host=10.0.7.113
master-user=backup
master-password=123
master-port=3306
replicate-do-db=gjpmaster
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
[root@gjpmaster tmp]# service mysqld restart
mysql> slave stop;
mysql> change master to master_host='10.0.7.113',master_user='gjpmaster', master_password='gjpmaster321',master_log_file='mysql-bin.000002',master_log_pos=478;
change master to master_host='10.0.0.139',master_user='gjpmaster', master_password='gjpmaster321',master_log_file='mysql-bin.000002',master_log_pos=11395;
mysql> slave start;
mysql> show slave status\G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 10.0.7.113
Master_User: gjpmaster
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000002
Read_Master_Log_Pos: 478
Relay_Log_File: mysqld-relay-bin.000002
Relay_Log_Pos: 251
Relay_Master_Log_File: mysql-bin.000002
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
从站:
mysql> grant replication slave on *.* to "gjpmaster"@"10.0.7.112" identified by "gjpmaster321";
[root@gjpslave html]# cat /etc/my.cnf
[mysqld]
server-id=2
log-bin=mysql-bin
binlog-do-db=gjpmaster
master-host=10.0.7.112
master-user=backup
master-password=123
master-port=3306
replicate-do-db=gjpmaster
#master-connect-retry=60
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
service mysqld restart
mysql> slave stop;
mysql> change master to master_host='10.0.7.112',master_user='gjpmaster', master_password='gjpmaster321',master_log_file='mysql-bin.000002',master_log_pos=316;
change master to master_host='10.0.0.139',master_user='gjpmaster', master_password='gjpmaster321',master_log_file='mysql-bin.000001',master_log_pos=106;
mysql> slave start;
mysql> SHOW SLAVE STATUS\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 10.0.7.112
Master_User: gjpmaster
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000002
Read_Master_Log_Pos: 628
Relay_Log_File: mysqld-relay-bin.000002
Relay_Log_Pos: 563
Relay_Master_Log_File: mysql-bin.000002
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB: gjpmaster
use gjpmaster;
update wp_posts set post_content=replace(post_content,'10.0.7.112','10.0.7.113');
update wp_posts set guid=replace(guid,'10.0.7.112','10.0.7.113');
第一个域名是老域名 第二个是新的
UPDATE wp_options SET option_value=replace(option_value,'http://10.0.7.112', 'http://10.0.7.113') WHERE option_name='home' OR option_name='siteurl';
最后同步成功

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment utiliser Docker Desktop? Docker Desktop est un outil pour exécuter des conteneurs Docker sur les machines locales. Les étapes à utiliser incluent: 1. Installer Docker Desktop; 2. Démarrer Docker Desktop; 3. Créer une image Docker (à l'aide de DockerFile); 4. Build Docker Image (en utilisant Docker Build); 5. Exécuter Docker Container (à l'aide de Docker Run).

Le processus de démarrage de MySQL dans Docker se compose des étapes suivantes: Tirez l'image MySQL pour créer et démarrer le conteneur, définir le mot de passe de l'utilisateur racine et mapper la connexion de vérification du port Créez la base de données et l'utilisateur accorde toutes les autorisations sur la base de données

Docker LNMP Container Call Étapes: Exécutez le conteneur: docker run -d --name lnmp-container -p 80:80 -p 443: 443 lnmp-stack pour obtenir le conteneur ip: docker inspect lnmp-container | Site Web d'accès Grep iPadress: http: // & lt; contener ip & gt; /index.phpssh Access: docker exec -it lnmp-container bash access mysql: mysql -u roo

Vs Code Système Exigences: Système d'exploitation: Windows 10 et supérieur, MacOS 10.12 et supérieur, processeur de distribution Linux: minimum 1,6 GHz, recommandé 2,0 GHz et au-dessus de la mémoire: minimum 512 Mo, recommandée 4 Go et plus d'espace de stockage: Minimum 250 Mo, recommandée 1 Go et plus d'autres exigences: connexion du réseau stable, xorg / wayland (Linux) recommandé et recommandée et plus

Les raisons de l'installation des extensions de code vs peuvent être: l'instabilité du réseau, les autorisations insuffisantes, les problèmes de compatibilité système, la version de code vs est trop ancienne, un logiciel antivirus ou des interférences de pare-feu. En vérifiant les connexions réseau, les autorisations, les fichiers journaux, la mise à jour vs du code, la désactivation des logiciels de sécurité et le redémarrage du code ou des ordinateurs, vous pouvez progressivement dépanner et résoudre les problèmes.

Dépannage des étapes pour la construction d'image Docker échouée: cochez la syntaxe Dockerfile et la version de dépendance. Vérifiez si le contexte de construction contient le code source et les dépendances requis. Affichez le journal de construction pour les détails d'erreur. Utilisez l'option - cibler pour créer une phase hiérarchique pour identifier les points de défaillance. Assurez-vous d'utiliser la dernière version de Docker Engine. Créez l'image avec --t [Image-Name]: Debug Mode pour déboguer le problème. Vérifiez l'espace disque et assurez-vous qu'il est suffisant. Désactivez SELINUX pour éviter les interférences avec le processus de construction. Demandez de l'aide aux plateformes communautaires, fournissez Dockerfiles et créez des descriptions de journaux pour des suggestions plus spécifiques.

Méthode de visualisation du processus docker: 1. Commande Docker CLI: Docker PS; 2. Commande CLI Systemd: Docker d'état SystemCTL; 3. Docker Compose CLI Commande: Docker-Compose PS; 4. Process Explorer (Windows); 5. / Répertoire proc (Linux).

VS Code est le code Visual Studio Nom complet, qui est un éditeur de code multiplateforme gratuit et open source et un environnement de développement développé par Microsoft. Il prend en charge un large éventail de langages de programmation et fournit une mise en surbrillance de syntaxe, une complétion automatique du code, des extraits de code et des invites intelligentes pour améliorer l'efficacité de développement. Grâce à un écosystème d'extension riche, les utilisateurs peuvent ajouter des extensions à des besoins et des langues spécifiques, tels que les débogueurs, les outils de mise en forme de code et les intégrations GIT. VS Code comprend également un débogueur intuitif qui aide à trouver et à résoudre rapidement les bogues dans votre code.
