我有一个要求,在两个具有不同名称且具有不同列名称的表之间创建复制。是否有可能创建这样的复制。
server A server B
---------- ----------
Table : Test Table : SUBS
-------------- ---------------
columns A,B,C Columns D,E,F,G,H
Run Code Online (Sandbox Code Playgroud)
我想配置复制,以便将 A 列数据复制到 D 列,将 B 列数据复制到 E 列,将 C 列数据复制到 F 列
sql-server replication sql-server-2008 database-replication merge-replication
我正在使用主-主复制进行一些测试,并且遇到了一些奇怪的问题,我将尝试描述我遵循的过程,以便有人可以重现该问题。
我在 2 个虚拟机上和每个虚拟机的配置文件中设置了复制:
-- Master1 --
auto_increment_increment = 2
auto_increment_offset = 1
-- Master2 --
auto_increment_increment = 2
auto_increment_offset = 2
Run Code Online (Sandbox Code Playgroud)
这些设置应该导致自动增量列的算术级数:
- Master1: 1,3,5,7,9,11,13 ...
- Master2: 2,4,6,8,10,12,14 ...
Run Code Online (Sandbox Code Playgroud)
Master1 得到奇数,Master2 得到偶数。然后我创建一个测试数据库并添加一个具有以下定义的表:
CREATE TABLE `t1` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`c1` varchar(50) DEFAULT NULL,
`d1` date DEFAULT '1970-01-01',
PRIMARY KEY (`id`)
) ENGINE=MyISAM;
Run Code Online (Sandbox Code Playgroud)
当然,数据库是在两台服务器上创建的。之后,我执行
START SLAVE;
Run Code Online (Sandbox Code Playgroud)
在两台服务器上,以便开始复制。为了生成数据,我使用以下过程:
必须插入单个记录才能使进程起飞
INSERT INTO t1(c1,d1) SELECT LPAD('', 50, MD5( RAND() ) ), DATE_ADD( CURDATE(), INTERVAL FLOOR( RAND() * 365 ) DAY …
mysql replication auto-increment master-slave database-replication
长话短说 - 我正在处理一个大型数据库,其中基本用户详细信息(用户 ID(索引)、用户名、密码、父用户、状态)存储在一个数据库中,扩展用户详细信息(相同用户 ID(索引)、全名、地址)等等)存储在另一个服务器上的另一个数据库中。
我需要做一个查询,我选择特定用户拥有的所有用户(通过基本用户详细信息数据库中的父用户字段),按他们的全名(来自扩展用户详细信息字段)排序,一次只选择 25 个(有对于任何一个用户来说是数千,也许是数万)。
据我所知,有三种可能的解决方案;
No JOIN - 在一个查询中获取所有用户 ID,并根据这些 ID 运行第二个查询。这会很好,除非用户 ID 的数量可能会变得如此之多,以至于超过最大查询长度,或者效率极低。
将具有基本用户详细信息的数据库表复制到具有扩展详细信息的服务器上,以便我可以执行 JOIN
使用联合存储引擎表实现与#2 相同的结果
似乎 3 是最好的选择,但我几乎找不到关于性能的信息,而且我还发现了一条评论,在生产数据库上使用它时要小心。
我将不胜感激关于什么是最佳实施的任何建议。
谢谢!
我目前有一个主服务器,并希望添加另一个主服务器进行故障转移.
在主服务器上,我已将以下内容添加到"my.ini"
server-id = 1
replicate-same-server-id = 0
auto-increment-increment = 2
auto-increment-offset = 1
log_bin=mysql-bin
log_error=mysql-bin.err
binlog_do_db=1
binlog_do_db=2
binlog_do_db=3
binlog_do_db=4
Run Code Online (Sandbox Code Playgroud)
添加后:
master-host = [IP]
master-user = [usernameslaveuser]
master-password = [password]
master-connect-retry = 30
Run Code Online (Sandbox Code Playgroud)
mysql服务器不再启动...所以我决定先让辅助服务器正常工作.
问题2:在新服务器上,我从主数据库的"data"/ mysql目录复制了我的用户文件.我还用MySQL工作台导入了所有数据库.
然后我把它添加到"my.ini":
server-id=2
replicate-same-server-id = 0
auto-increment-increment = 2
auto-increment-offset = 2
master-host = [IP]
master-user = [usernameslaveuser]
master-password = [password]
master-connect-retry = 30
log_bin=mysql-bin
log_error=mysql-bin.err
binlog_do_db=1
binlog_do_db=2
binlog_do_db=3
binlog_do_db=4
Run Code Online (Sandbox Code Playgroud)
服务器启动正常,所以我决定在主服务器上的复制数据库中添加一个表,但是没有复制到辅助服务器的更改...
我google了一下,发现我必须在mysql命令行中运行一些命令才能使复制工作.但是,当我在辅助服务器上打开它时,它无法启动...在命令提示符下打开它时,它显示mysql.exe:未知变量'server-id = 2"
两台服务器都运行Windows Server 2012 R2并安装了MySQL 5.6.15 64位.有人可以指导我真实的最后一部分设置吗?
当我使用传统方式管理我的区域文件时,我可以将以下配置放入/etc/bind/named.conf.local设置主/从复制。
zone "my_zone.com" {
type master;
file "/etc/bind/db.my_zone.com";
};
Run Code Online (Sandbox Code Playgroud)
和
zone "my_zone.com" {
type slave;
file "db.my_zone.com";
masters { master_ip_address; };
};
Run Code Online (Sandbox Code Playgroud)
但是如果我rndc用来管理我的区域文件,我应该如何管理这种复制关系?
最近我注意到主从复制中从服务器错误日志中出现以下错误。即使复制没有问题,从属也按照主属准时进行。实际上,我在从属设备上执行了一些繁重的报告查询,并将其结果插入到临时/虚拟(不是临时表)表中。我需要社区帮助来解决我的以下两个疑问。如果有人在这方面帮助我,我将非常感激。
[ERROR] Slave SQL: Could not execute Update_rows event on table DBname.tablename; Lock wait timeout exceeded; try restarting transaction,
Error_code: 1205; handler error HA_ERR_LOCK_WAIT_TIMEOUT; the event's master log mysql-bin.******, end_log_pos *******, Error_code: 1205
Run Code Online (Sandbox Code Playgroud)
根据我的理解,当我获取报告(从生产表中获取并插入虚拟表)时,会发生此错误,因为 mysql 无法获得锁定,并且由于锁定可用于 mysql,因此更新语句将成功执行意味着我的数据将会更新迄今为止在奴隶上。
我们知道 select 语句不会锁定表,所以会发生这种情况,因为我在从生产表获取数据的同时将数据插入到另一个表中。
提前致谢。
我有需要监视的流复制。所以Zabbix有一个特殊的用户。我不想使用 pg_mongz 并决定将我自己的查询设置为 pg_catalog 模式的视图 pg_stat_replication 以获取复制状态。
当我使用查询时:
select *
from pg_stat_replication;
Run Code Online (Sandbox Code Playgroud)
它返回管理员的复制状态记录。但是当我以监控用户身份登录时,它仅返回:
pid, usesysid, usename, application_name
Run Code Online (Sandbox Code Playgroud)
所以client_addr、client_hostname、client_port、backend_start、state、sent_location、write_location等参数为空。
首先,我向用户授予了对架构和表的权限:
grant usage on schema pg_catalog to usrmonitor;
grant select on all tables in schema pg_catalog to usrmonitor;
Run Code Online (Sandbox Code Playgroud)
但这没有帮助。当我查看视图时,我发现查询使用函数并授予执行权限:
grant execute on function pg_stat_get_wal_senders() to usrmonitor;
grant execute on function pg_stat_get_activity(integer) to usrmonitor;
Run Code Online (Sandbox Code Playgroud)
但选择查询仍然返回空列。可能是什么问题?
我有一个相当大的数据库,我试图将其从字符集和排序规则转换latin1/latin1_swedish_ci为utf8mb4/utf8mb4_unicode_ci. 我希望设置复制到从站,运行转换,然后在完成后提升从站以避免停机。
我注意到在运行查询时...
ALTER TABLE `sometable` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Run Code Online (Sandbox Code Playgroud)
... MySQL的自动转换text到mediumtext或mediumtext以longtext等
有没有办法关闭这个功能?MySQL有这个特性很好,但问题是它破坏了复制,因为slave上的表结构与master不同。
我正在四个 PostgreSQL 工作人员之间设置双向复制,并且我想让我的 Go 数据库连接池处理所有四个工作人员的连接。它应该能够为它们创建多个连接,为任何给定的查询随机选择一个,并在连接断开时进行故障转移。这在 Go 数据库库中可行吗?或者我应该只使用pgBouncer而不是尝试让database/sql或pgx来处理这种平衡?
我正在 Debian 8 机器中将我的 Web 服务器 PHP 版本从 5.5 升级到 7.1。
问题是 mysqlnd_ms 不适用于 PHP7。
据我了解,应该有另一种方法来配置我的服务器以添加到 MySQL 主服务器和 MySQL 从服务器的连接。
也许你可以给我指一个教程?
我想指出的是,我正在配置一个网络服务器,而不是一个 mysql 服务器。我需要配置 mysql 客户端以允许 php 连接到主或从 mysql 服务器。
谢谢你。
replication ×10
mysql ×6
postgresql ×2
bind ×1
dns ×1
go ×1
master-slave ×1
monitoring ×1
mysql-5.6 ×1
php ×1
sql-server ×1
utf-8 ×1